Estoy tratando de eliminar el duplicado de la siguiente matriz de Objeto que tiene algún elemento anidado con matriz
A continuación se muestra mi matriz.
{ field: 'A', value: { key_A: ['ajd', 'ajd', 'kajd'], }, }, { field: 'A', value: { key_B: ['123', '4', '45', '94'], }, }, { field: 'A', value: { key_A: ['ajd', 'ajd', ''], }, }, { field: 'A', value: { key_B: ['123', '4', '45'], }, }, { field: 'Z', value: { key_A: ['ajdm', 'askjd', 'kajd'], }, }, { field: 'Z', value: { key_B: ['13', '123', '1823'], }, }, { field: 'Z', value: { key_A: ['ajdm', 'askjd', ''], }, }, { field: 'Z', value: { key_B: ['13', '123', ''], }, }, ];y quiero mantener la primera clave debajo de cada campo, es decir, la primera clave_A en el campo 'A' y la primera clave_B en el campo 'A'
lo mismo para el campo 'Z'
tan final o/p:
{ field: 'A', value: { key_A: ['ajd', 'ajd', 'kajd'], }, }, { field: 'A', value: { key_B: ['123', '4', '45', '94'], }, }, { field: 'Z', value: { key_A: ['ajdm', 'askjd', 'kajd'], }, }, { field: 'Z', value: { key_B: ['13', '123', '1823'], }, }, ];Probé algo de lógica con el filtro en bucle sobre la matriz, pero para el anidado no pude encontrar una lógica.
Una posible implementación utilizando la respuesta proporcionada aquí . findIndex proporciona el índice del primer elemento que cumple la condición y, por lo tanto, el filter filtra los primeros elementos que satisfacen la condición.
Object.keys(t.value)[0] da "key_A" o "key_B" dependiendo del elemento
let arr = [ { field: 'A', value: { key_A: ['ajd', 'ajd', 'kajd'], }, }, { field: 'A', value: { key_B: ['123', '4', '45', '94'], }, }, { field: 'A', value: { key_A: ['ajd', 'ajd', ''], }, }, { field: 'A', value: { key_B: ['123', '4', '45'], }, }, { field: 'Z', value: { key_A: ['ajdm', 'askjd', 'kajd'], }, }, { field: 'Z', value: { key_B: ['13', '123', '1823'], }, }, { field: 'Z', value: { key_A: ['ajdm', 'askjd', ''], }, }, { field:'Z', value: { key_B: ['13', '123', ''], }, }, ]; let res = arr.filter((v, i, self) => i === self.findIndex((t) => ( t.field === v.field && Object.keys(t.value)[0] === Object.keys(v.value)[0] )) ) console.log(res) .as-console-wrapper { max-height: 100% !important; top: 0; }Algo como esto debería hacerlo.
interface Address { address: string, city: string, state: string, zip: number } const addresses: Address[] = [ { address: "1234 Main St", city: "San Diego", state: "CA", zip: 92014 }, { address: "4444 Main St", city: "San Diego", state: "CA", zip: 92014 }, { address: "5555 Main St", city: "San Diego", state: "CA", zip: 92014 }, { address: "6666 Main St", city: "San Diego", state: "CA", zip: 92014 }, { address: "7777 Main St", city: "San Diego", state: "CA", zip: 92014 } ] function delay(time: number) { return new Promise(resolve => setTimeout(resolve, time)); } const apiCaller = async(addr: Address) => { await delay(0.5); return `Got ${addr.address}` } const apiRunner = async () => { const results: PromiseSettledResult<string>[] = []; let promises: Promise<string>[] = []; for (const address of addresses) { promises.push(apiCaller(address)); if (promises.length >= 10) { const rez = await Promise.allSettled(promises); results.push(...rez); promises = []; } } if (promises.length > 0) { const rez = await Promise.allSettled(promises); results.push(...rez); } return results; }