Javascript - фильтрация объектов вне массива

Я сталкиваюсь с проблемой, когда, когда я извлекаю информацию в свой массив «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() возвращает массив, и ваш массив находится внутри него. Вместо этого используйте testOutput.serverArray.
Ori Drori 09.04.2021 22:04
Object.values() дает вам массив всех значений в объекте. Ваш объект имеет одно значение, поэтому Object.values() дает вам массив с одним элементом. Этот единственный элемент представляет собой массив (единственное значение в объекте). Итак, вам нужно будет перебрать Object.values(), затем вызвать .filter() для каждого элемента или сделать Object.values(testOutput)[0]. Почему вы вообще здесь используете Object.values()? Ожидаете ли вы более одного значения в testOutput?
Rocket Hazmat 09.04.2021 22:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
53
2

Ответы 2

Вам нужно разрушать массива 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));

Другие вопросы по теме