tengo problemas para combinar objetos de una matriz de objetos en mecanografiado.
la matriz se ve así:
0: {type: 'FeatureCollection', features: Array(134)} 1: {type: 'FeatureCollection', features: Array(109)}lo que necesito es un objeto (sin matriz) con todas las "características" combinadas, para que se vea así:
{type: 'FeatureCollection', features: Array(243)}soy muy nuevo en mecanografiado, así que lo siento por esa pregunta probablemente fácil ...
¡¡Muchas gracias!!
EDITAR: tal vez la pregunta no era demasiado buena para entender. Espero que esto ayude: Array(134) significa que hay 134 objetos dentro. esto hace lo que necesito manualmente cuando la matriz de objetos (colección) tiene 2 de largo:
const result = [...collection[0].features, ...collection[1].features]; const resultCollection: FeatureCollection = collection[0]; resultCollection.features = result;Necesito hacer que esto funcione para cualquier duración de la colección.
¿Estás buscando algo como esto? Tendrá que agregar tipos, pero puede fusionar las matrices de features de todas las entradas en la matriz de data utilizando métodos Vanilla JS.
output y especifique su type .Array#filter para seleccionar las entradas en data con el tipo coincidente.Array#flatMap para seleccionar la matriz de features de cada una de las entradas anteriores y proyectar su contenido en una única matriz. const data = [ { type: 'FeatureCollection', features: [1, 2, 3] }, { type: 'FeatureCollection', features: [4, 5, 6] } ]; const output = { type: 'FeatureCollection', features: data .filter(obj => obj.type === 'FeatureCollection') .flatMap(obj => obj.features) }; console.dir(output);Con la función de reducción:
const array = [ {type: 'FeatureCollection', features: [1, 2, 3]}, {type: 'FeatureCollection', features: [4, 5, 6]}, {type: 'Test', features: [4, 5, 6]} ] const merged = array.reduce((array, item) => { const found = array.find((i) => i.type === item.type); if (found) { found.features.push(...item.features); } else { array.push(item); } return array; }, []); console.log(merged);---- EDITADO ----
opcion 2 :
const array = [ {type: 'FeatureCollection', features: [1, 2, 3]}, {type: 'FeatureCollection', features: [4, 5, 6]}, {type: 'Test', features: [4, 5, 6]} ] const merged = array.reduce((obj, item) => { if (obj[item.type]) { obj[item.type].push(...item.features); } else { obj[item.type] = item.features; } return obj; }, {} as {[key: string]: number[]}); const keys = Object.keys(merged); const result = keys.map((k) => ({type: k, features: merged[k]})); console.log(result);Simplemente use una función Array.prototype.reduce simple y el operador de propagación
const original = [ { type: "banana", features: ["34", "wow", "hotdog"] }, { type: "banana", features: ["dog", "cat", "recursion"] }, ]; const compress = (original) => original.reduce((acc, cur) => { acc.features = [...(acc.features ?? []), ...cur.features]; return acc; }, { type: (original[0].type) }); console.log(compress(original));