繁体   English   中英

用不同的键将同一数组中的两个对象合并

[英]Merge objects from the same array by two with different keys

我有一系列双打

const data = [
-0.003,-8.178509172818559E-16,
0.002,-1.3576469946421737E-15,
0.007,-1.2329107629591376E-1]

我想在 react-vis 中使用它们。

在 react-vis 中插入数据的语法是

                        {x: -0.003, y: -8.178509172818559E-16},
                        {x: 0.002, y: -1.3576469946421737E-15},

我想做同样的事情。

所以我制作了索引,然后分配了 x 和 y 值


    let preparedData = Object.assign({}, data);
    let preparedData2 = Object.keys(preparedData).map((keyName =>
    {
        const newKey = keyName % 2 === 0 ? 'x' : 'y';
        return { [newKey] : preparedData[keyName] };
    }));

所以我的数组看起来像:


0: {x: -0.003}
1: {y: -8.178509172818559e-16}
2: {x: 0.002}
3: {y: -1.3576469946421737e-15}
4: {x: 0.007}

我想在不使用辅助库的情况下按 x 和 y 对它们进行分组。 我尝试减少没有运气,任何帮助表示赞赏

您可以将两个项目切片,将数组解构为xy并为要推送的对象获取简写属性。

 var data = [-0.003, -8.178509172818559E-16, 0.002, -1.3576469946421737E-15, 0.007, -1.2329107629591376E-1], result = [], i = 0; while (i < data.length) { let [x, y] = data.slice(i, i += 2); result.push({ x, y }); } console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

一个简短的方法。

 var data = [-0.003, -8.178509172818559E-16, 0.002, -1.3576469946421737E-15, 0.007, -1.2329107629591376E-1], result = data.reduce((r, v, i) => { (r[i >> 1] = r[i >> 1] || {})['xy'[i % 2]] = v; return r; }, []); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

交替收集 x 和 y。

 const data = [ -0.003, -8.178509172818559e-16, 0.002, -1.3576469946421737e-15, 0.007, -1.2329107629591376e-1 ]; // Using for Loop: const result = []; for (let i = 0; i < data.length; i += 2) { const xy = { x: data[i], y: data[i + 1] }; result.push(xy); } console.log(result); // Using reduce. const result1 = data.reduce((arr, xy, index) => { if (index % 2 === 0) { const data = { x: xy }; arr.push(data); } else { arr[Math.floor(index / 2)].y = xy; } return arr; }, []); console.log(result1);
 .as-console-row {color: blue!important}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM