Проверьте и добавьте свойство в объекте массивов - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть объект / вывод в очень специфическом формате, подробно описанном ниже:

result = 
AB: [ 0:{Name: "Tom", team:"Spirit", position: "Defender", score: 22 }
    1:{Name: "Paul", team:"Vikings", position: "center" }
    2:{Name: "Jim", team:"United", position: "Wing", }
    3:{Name: "Greg", team:"Crusaders", position: "Fullback", score: 54}
    4:{Name: "Tim", team:"Vikings", position: "Fullback", score: 77 }
    ]
CD: [0:{...},1:{...},2:{...},3:{...},4:{...}]
EF: [0:{...},1:{...},2:{...},3:{...},4:{...}]
GH: [0:{...},1:{...},2:{...},3:{...},4:{...}]

Результат имеет вложенные массивы.На некоторых выходах свойство score отсутствует, но мне нужно, чтобы оно было - если его нет, мне нужно добавить его по умолчанию как score:"", если оно есть, то просто оставить его в покое.

Мне удалось добавить свойство score, но только на верхнем уровне объекта результата, например

...
    GH: [0:{...},1:{...},2:{...},3:{...},4:{...}]
    score:""

от

 if(result.hasOwnProperty("score")) {
     alert('Item has already that property');
 } else {
     result.score = "" ;
 }

Я могуукажите целевой путь (ниже), но я хочу применить его ко всем:

 if(finalResult['AB'][1].hasOwnProperty("durabilityScore")) {
    alert('Item has already that property');
} else {
    finalResult['AB'][1].durabilityScore = 'value';
}

Я использую Lodash, если это поможет.Спасибо

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете перебрать значения объекта и массива. Затем проверьте, существует ли свойство, и присвойте значение, если нет.

Это решение не перезаписывает ложные значения (0, '', false, undefined, null), что произойдет, если используется проверка по умолчанию, например

o.score = o.score || ''

var result = { AB: [{ Name: "Tom", team:"Spirit", position: "Defender", score: 22 }, { Name: "Paul", team:"Vikings", position: "center" }, { Name: "Jim", team:"United", position: "Wing" }, { Name: "Greg", team:"Crusaders", position: "Fullback", score: 54 }, { Name: "Tim", team:"Vikings", position: "Fullback", score: 77 }] };

Object.values(result).forEach(a => a.forEach(o => 'score' in o || (o.score = '')));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...