Я пытаюсь отфильтровать массив, чтобы получить только то, что хочу, и я пробовал использовать фильтр и уменьшить, но не смог заставить его полностью работать. Я пытаюсь получить только объекты, у которых есть "System.State"
с "oldValue"
и "newValue"
const data = {
"value": [
{
"id": 23,
"fields": {
"System.State": {
"oldValue": "Forecasted",
"newValue": "Done"
}
}
},
]
}
Проблема в том, что массив value
содержит несколько объектов, которые могут НЕ иметь "System.State"
и некоторые, у которых есть "System.State"
, но только с "newValue"
вместо "oldValue"
и "newValue"
, поэтому я получаю много неопределенных ошибок и действительно не знаю, как лечить эти ситуации.
Это пример, в котором нет "System.State"
и еще один с "System.State
", но только с "newValue"
:
const data = {
"value": [
{
"id": 23,
"fields": {
"System.State": {
"oldValue": "Forecasted",
"newValue": "Done"
}
}
},
{
"id": 24,
"fields": {
"System.State": {
"newValue": "New"
}
}
},
{
"id": 25,
"fields": {
"System.AuthorizedDate": { // This is only an example of an object that does not have System.State
"newValue": "2020-03-13T14:14:37.1Z"
}
}
},
]
}
Я использую TFS API, если кто-то хочет знать . Это то, что я пробовал использовать с фильтром:
data.value.fields.filter(status => status.fields['System.State'].oldValue === 'Forecasted' && status.fields['System.State'] === 'Done')
И это с использованием редуктора:
const filter = data.value.reduce((c, n) => {
const HasNewAndOldValue = c.fields['System.State'].oldValue === 'Forecasted' && c.fields['System.State'].newValue === 'Done';
if (c.fields['System.State'] && HasNewAndOldValue) {
return c;
}
c.push(n);
}, [])
console.log(data.value.fields && filter);
Что я делаю не так? Кстати, я использую ['System.State']
потому что я не могу получить доступ к свойству объекта с точкой.