#javascript #arrays #json
Вопрос:
более простой способ воссоздать выходные данные этого кода, где, если sub arr0 не равен null, он затем объединяет его и фильтрует желаемый результат по ключу code
.
Заранее благодарю вас!
let array = [
{
id: 1,
text: 'stuff1',
arr0: [
{id:1, code: 'imacode1'},
{id:2, code: 'imacode2'},
]
},
{
id: 2,
text: 'stuff2',
arr0: [
{id:3, code: 'imacode3'},
{id:4, code: 'imacode4'},
]
},
{
id: 3,
text: 'stuff3',
arr0: []
}
]
let arr = [];
for(let i of array){
if(i.arr0.length !== 0){
arr.push(i.arr0)
}
}
arr = arr.flat()
for(let j of arr){
if(j.code === 'imacode2'){
let code = arr.filter(j=>j.code!=='imacode2')
code = code.map(({code}) => code)
console.log(code)
}
}
редактировать: добавлен фрагмент
Ответ №1:
Вы можете использовать Array.flatMap() вместе с Array.filter(), чтобы получить желаемый результат, сначала мы используем .flatMap() для создания массива, включающего все элементы в каждом arr0.
Затем мы используем .фильтр () включает только нужные элементы, используя пользовательскую (изменяемую) функцию фильтра, в данном случае удаляя любой элемент с кодом ‘imacode2’.
let array = [ { id: 1, text: 'stuff1', arr0: [ {id:1, code: 'imacode1'}, {id:2, code: 'imacode2'}, ] }, { id: 2, text: 'stuff2', arr0: [ {id:3, code: 'imacode3'}, {id:4, code: 'imacode4'}, ] }, { id: 3, text: 'stuff3', arr0: [] } ]
// Change filter as desired..
const filterProc = ({id, code}) => code !== 'imacode2';
const result = array.flatMap(el => el.arr0 || []).filter(filterProc).map(({code}) => code);
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Комментарии:
1. это работает, спасибо, и чтобы получить результат только для кода, который я только что добавил в другую карту, вот так, var x = result.map(({code})=>code)
2. Я тоже обновлю ответ!