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.

+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] и значение нет. Таким образом, вы получаете (почти) весь список, заданный кнопками [0] ... [последний элемент]. Поэтому каждый раз он устанавливает все элементы в клавиши [i].

Исключите эти две строки, чтобы исходный json не был изменен, и он будет работать лучше.

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

Свойство OBJ является name и value, не total_kills.

Смежные вопросы