Объедините неизвестные подмассивы объектов из массива объектов и отфильтруйте их

#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. Я тоже обновлю ответ!