2016-08-30 4 views
0

私はこの問題を解決するのに苦労しています。
何らかの理由で.hasOwnProperty()が機能しません。
私がやりたいことは、現在ループしている配列に値(配列内の値)が存在しないときに新しいオブジェクト(別の配列内)を作成することです。
理由は分かりませんが、最初のの条件は、条件が満たされたときにのみループするのではなく、の都度、ループにループします。
P.S私はJSONにループしています。 Example of JSON I'm parsing
オブジェクトに値が設定されていないかチェックする(JS)

var keys = [ 

     "total_kills", 
     "total_deaths", 
     "total_planted_bombs", 
     "total_defused_bombs", 
     "total_kills_knife", 
     "total_kills_headshot", 
     "total_wins_pistolround", 
     "total_wins_map_de_dust2", 
     "last_match_wins", 
     "total_shots_fired", 
     "total_shots_hit", 
     "total_rounds_played", 
     "total_kills_taser", 
     "last_match_kills", 
     "last_match_deaths", 
     "total_kills_hegrenade", 

     ]; 

    var resArray = stats.playerstats.stats; 
    var statsArray = []; 

    for (var i = 0; i < keys.length; i++) { 
     for (var j = 0; j < resArray.length; j++) { 
      if (!resArray[j]["name"].hasOwnProperty(keys[i])) { 
       resArray[j]["name"] = keys[i]; 
       resArray[j]["value"] = "None"; 
       statsArray.push({ 
        "name": resArray[j]["name"], 
        "value": resArray[j]["value"] 
       }); 
      } 
      if (resArray[j]["name"] === (keys[i])) { 
       statsArray.push({ 
        "name": resArray[j]["name"], 
        "value": resArray[j]["value"] 
       }); 
      } 
     } 

    } 

気をつけてください。

答えて

1

if (!resArray[j]["name"].hasOwnProperty(keys[i])) {

明らかに、この文は間違っています。 resArray [j] ["name"]は文字列であり、オブジェクトではありません。通常、あるオブジェクトにhasOwnPropertyメソッドを使用するためのenumableプロパティがあるかどうかをチェックしたいとします。

+0

ああ、愚かな私...私はそれを見ませんでした。 オブジェクトに値が存在しないかどうかを確認するにはどうすればよいですか? –

+0

obj.hasOwnProperty。 –

0

関数の完了後に元の配列(stats.playerstats.stats)を見ると、配列の各キーの名前が変更されていることがわかります。

これが問題の原因です。

if (!resArray[j]["name"].hasOwnProperty(keys[i])) { 
      resArray[j]["name"] = keys[i]; 
      resArray[j]["value"] = "None"; 

この要素は、彼らに[i]のプロパティを、キーを持っていない場合は、ここで言っている、[I]キーに設定し、noneに値。つまり、リスト全体がキー[0] ...キー[最後の要素]に設定された状態になります。だから毎回、すべての要素をキー[i]に設定しています。

元のjsonが変更されないように、これらの2行を削除してください。

1
var obj = {name: "total_kills", value: 25555}; 

OBJのプロパティがnamevalue、ないtotal_killsです。

関連する問題