Есть 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»?
Вы можете сделать 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);
Ты спас меня братан. ваше решение оказало большое влияние на решение моей проблемы, я боролся с этим целыми днями, но ни одно из решений не помогло мне без вашего решения. Большое спасибо.
Вот более общее решение, использующее сканирование объектов
// 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
спасительный вопрос, спасибо Рамзес.