Los datos son una matriz, que tiene algunos objetos en ella. el objetivo aquí es fusionar los objetos que tienen los mismos valores de x e y.
el código se da a continuación:
let data = [{ "x": 1, "y": 2, "color": "red" }, { "x": 1, "y": 2, "stroke": "violet" }, { "x": 3, "y": 4, "color": "green" }, { "x": 3, "y": 4, "stroke": "blue" }]; var finalArr = data.reduce((m, o) => { var found = m.find(p => (px === ox) && (py === oy) ); if (found) { found = {...o} } else { m.push(o); } return m; }, []);la matriz de datos original es:
let data = [ { "x": 1, "y": 2, "color": "red" }, { "x": 1, "y": 2, "stroke": "violet" }, { "x": 3, "y": 4, "color": "green" }, { "x": 3, "y": 4, "stroke": "blue" } ];el resultado esperado es:
let data = [ { "x": 1, "y": 2, "color": "red", "stroke": "violet" }, { "x": 3, "y": 4, "color": "green", "stroke": "blue" } ];Puede usar un objeto con una clave unida y asignar el objeto real al objeto del grupo.
const data = [{ x: 1, y: 2, color: "red" }, { x: 1, y: 2, stroke: "violet" }, { x: 3, y: 4, color: "green" }, { x: 3, y: 4, stroke: "blue" }], getKey = o => [ox, oy].join('|'), result = Object.values(data.reduce((r, o) => { Object.assign(r[getKey(o)] ??= {}, o); return r; }, {})); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }Primero, acumule pares clave-valor para el par de claves x e y y finalmente y x e y como valores en el mismo nivel.
Esto también funcionaría.
const data = [ { x: 1, y: 2, color: "red" }, { x: 1, y: 2, stroke: "violet" }, { x: 3, y: 4, color: "green" }, { x: 3, y: 4, stroke: "blue" }, ]; const output = Object.entries( data.reduce((prev, { x, y, ...rest }) => { if (prev[`${x}-${y}`]) { prev[`${x}-${y}`] = { ...prev[`${x}-${y}`], ...rest }; } else { prev[`${x}-${y}`] = { ...rest }; } return prev; }, {}) ).map(([key, value]) => { const [x, y] = key.split("-"); return { x, y, ...value }; }); console.log(output);Simplemente haz esto
let data = [{ "x": 1, "y": 2, "color": "red" }, { "x": 1, "y": 2, "stroke": "violet" }, { "x": 3, "y": 4, "color": "green" }, { "x": 3, "y": 4, "stroke": "blue" }]; let result = data.reduce((acc, d ) => { acc[dx] ??= {x: dx, y: dy }; acc[dx].stroke = d.stroke; acc[dx].color = d.color; return acc; }, {}); console.log(Object.values(result));