Me gustaría saber cómo crear un nuevo objeto de matriz si la clave existe en JavaScript.
Tengo dos objetos de matriz, arr1 y arr2 . En arr2 , si el valor de c es verdadero y la clave de arr1 y un valor son iguales, insértelo en un nuevo objeto de matriz. Si arr2 de clave-valor es verdadero y coincide con la clave de arr1 , entonces empuje a una nueva matriz en JavaScript.
var arr1 = { data:[ {id:1, place: "IN", year: "2020", mode: "ON"}, {id:3, place: "TH", year: "2022", mode: "OFF"}, {id:5, place: "AU", year: "2025", mode: "ON"} ] }; var arr2=[ {a: "place", c: true}, {a: "year", c: true}, {a: "mode", c: false}, ] var finals = []; var result = arr1.data.map(e=>{ arr2.forEach(i=>{ if(ic == true && Object.keys(e)){ finals.push(e); } }) return finals })Rendimiento esperado:
[ {place: "IN", year: "2020"} {place: "TH", year: "2022"}, {place: "AU", year: "2025"} ]Casi estabas allí.
arr1.data.map crea una nueva matriz,newObj ,arr2key.a con el valor correspondiente en item , si key.c es verdaderonewObj var arr1 = { data:[ {id:1, place: "IN", year: "2020", mode: "ON"}, {id:3, place: "TH", year: "2022", mode: "OFF"}, {id:5, place: "AU", year: "2025", mode: "ON"} ] }; var arr2=[ {a: "place", c: true}, {a: "year", c: true}, {a: "mode", c: false}, ]; var result = arr1.data.map(item => { // 1 let newObj = {}; // 2 arr2.forEach(key => { // 3 if (key.c) { // 4 newObj[key.a] = item[key.a] } }); return newObj // 5 }) console.log(result)Lógica
arr2 con la condición node.c === true .map a través de arr1.data de cada objeto en esta matriz, cree un nuevo objeto con las claves que obtuvimos de la lógica anterior. var arr1 = { data: [ { id: 1, place: "IN", year: "2020", mode: "ON" }, { id: 3, place: "TH", year: "2022", mode: "OFF" }, { id: 5, place: "AU", year: "2025", mode: "ON" } ] } var arr2 = [ { a: "place", c: true }, { a: "year", c: true }, { a: "mode", c: false }, ]; const keys = arr2.filter((node) => node.c).map((node) => node.a); var result = arr1.data.map(e => { const obj = keys.reduce((acc, curr) => { acc[curr] = e[curr]; return acc; }, {}); return obj; }) console.log(result);Se puede hacer usando .map() y .reduce() :
var arr1 = { data: [ {id: 1, place: "IN", year: "2020", mode: "ON"}, {id: 3, place: "TH", year: "2022", mode: "OFF" }, {id: 5, place: "AU", year: "2025", mode: "ON" }, ] }; var arr2 = [ {a: "place", c: true}, {a: "year", c: true}, {a: "mode", c: false}, ]; const result = arr1.data.map(item => Object.keys(item).reduce((acc, key) => { const isEnabled = arr2.some(({a, c}) => a === key && c === true); return isEnabled ? { ...acc, [key]: item[key]} : acc; }, {}) ); console.log(result);