Фильтровать элементы из вложенного json

Есть json:

x = [
{"name":"Peter", "list":[{"position":"high", "id":"ZZ"},
                         {"position":"low", "id":"KJ"}]},
{"name":"Alise", "list":[{"position":"high", "id":"TC"},
                         {"position":"low", "id":"ZZ"}]}
]

Мне нужно избавиться от тех элементов в «списке», которые содержат «id»: «ZZ», используя filter(). Ожидаю в итоге следующий результат:

[
{"name":"Peter", "list":[{"position":"low", "id":"KJ"}]},
{"name":"Alise", "list":[{"position":"low", "id":"ZZ"}]}
]

Моя попытка добиться этого:

y = for (i=0;i<x.length;++i){
        for (n=0;n<x[i]["list"].length;++n){
             x[i]["list"][n].filter(id => "id" == "ZZ")
        }
    }

Вывод консоли браузера говорит

Uncaught TypeError: x[i]["list"][n].filter is not a function.

Не могли бы вы сказать мне, как я могу отфильтровать данный json и избавиться от строк «id»: «ZZ»?

спасительный вопрос, спасибо Рамзес.

gsharew 07.10.2022 18:04
Поведение ключевого слова "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
1
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете сделать map для каждого элемента и filter для каждого list этого элемента.

Я использую здесь оператор распространения, чтобы сохранить другие свойства одинаковыми и просто изменить list

const x = [
  {
    name: "Peter",
    list: [
      { position: "high", id: "ZZ" },
      { position: "low", id: "KJ" },
    ],
  },
  {
    name: "Alise",
    list: [
      { position: "high", id: "TC" },
      { position: "low", id: "ZZ" },
    ],
  },
];

const res = x.map((el) => ({
  ...el,
  list: el.list.filter(({ id }) => id !== "ZZ"),
}));

console.info(res);

Ты спас меня братан. ваше решение оказало большое влияние на решение моей проблемы, я боролся с этим целыми днями, но ни одно из решений не помогло мне без вашего решения. Большое спасибо.

gsharew 07.10.2022 18:04

Вот более общее решение, использующее сканирование объектов

// const objectScan = require('object-scan');

const myData = [ { name: 'Peter', list: [{ position: 'high', id: 'ZZ' }, { position: 'low', id: 'KJ' }] }, { name: 'Alise', list: [{ position: 'high', id: 'TC' }, { position: 'low', id: 'ZZ' }] } ];

const prune = (data, id) => objectScan(['[*].list[*]'], {
  rtn: 'count',
  filterFn: ({ value, property, parent }) => {
    if (value.id === id) {
      parent.splice(property, 1);
      return true;
    }
    return false;
  }
})(data);

console.info(prune(myData, 'ZZ')); // returns the number of deletions
// => 2

console.info(myData);
// => [ { name: 'Peter', list: [ { position: 'low', id: 'KJ' } ] }, { name: 'Alise', list: [ { position: 'high', id: 'TC' } ] } ]
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src = "https://bundle.run/[email protected]"></script>

Отказ от ответственности: я автор object-scan

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