Я сталкиваюсь с проблемой, когда, когда я извлекаю информацию в свой массив «const testOutput», когда я перехожу к фильтру, фильтр ничего не возвращает. Я думаю, что проблема в «serverArray:», который появляется в моем массиве. Вот мой код.
const testOutput = {
"serverArray": [{
"machineName": "test1",
"status": "ACTIVE",
"daysActive": 3,
"daysLeft": 117
},
{
"machineName": "test2",
"status": "ACTIVE",
"daysActive": 2,
"daysLeft": 118
},
{
"machineName": "test3",
"status": "ACTIVE",
"daysActive": 3,
"daysLeft": 117
}
]
}
console.info(Object.values(testOutput).filter(filtered => filtered.daysActive === 3));Когда я извлекаю serverArray: из скрипта javascript в сети, он фильтрует правильно. Поэтому мне было любопытно, есть ли что-то, что я мог бы добавить в свой фильтр, чтобы удалить «serverArray», чтобы можно было фильтровать объекты. Спасибо!
Object.values() дает вам массив всех значений в объекте. Ваш объект имеет одно значение, поэтому Object.values() дает вам массив с одним элементом. Этот единственный элемент представляет собой массив (единственное значение в объекте). Итак, вам нужно будет перебрать Object.values(), затем вызвать .filter() для каждого элемента или сделать Object.values(testOutput)[0]. Почему вы вообще здесь используете Object.values()? Ожидаете ли вы более одного значения в testOutput?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно разрушать массива serverArray из testOutput, отфильтровать его и переназначить. Я добавил дополнительное свойство к объекту testOutput, чтобы продемонстрировать «сохранение» других существующих свойств.
const testOutput = {
"foo": "bar",
"serverArray": [{
"machineName": "test1",
"status": "ACTIVE",
"daysActive": 3,
"daysLeft": 117
}, {
"machineName": "test2",
"status": "ACTIVE",
"daysActive": 2,
"daysLeft": 118
}, {
"machineName": "test3",
"status": "ACTIVE",
"daysActive": 3,
"daysLeft": 117
}]
}
const { serverArray, ...rest } = testOutput;
const filteredOutput = {
...rest,
serverArray: serverArray.filter(({ daysActive }) => daysActive === 3)
};
console.info(filteredOutput);.as-console-wrapper { top: 0; max-height: 100% !important; }Заменять testOutput К testOutput.serverArray
Пытаться
console.info(Object.values(testOutput.serverArray).filter(filtered => filtered.daysActive == 3));
Object.values()возвращает массив, и ваш массив находится внутри него. Вместо этого используйтеtestOutput.serverArray.