将javascript对象数组转换为数组数组

时间:2018-04-09 12:23:08

标签: javascript arrays ecmascript-6

我在ES6中寻找一种优雅的方式来转换这个数组:

var src = [{x:1,y:'a'},{x:2,y:'b'}];

到这个数组:

var desc = [[1,2],["a","b"]];

其中包含所有属性的数组和所有值的一个数组。

为此,我写了这段代码:

var src = [{x:1,y:'a'},{x:2,y:'b'}];

var prop1 = [];
var prop2 = [];

src.forEach(item => {
    prop1.push(item.x)
    prop2.push(item.y);
});

var desc = [prop1, prop2];

它工作正常但很长,所以我正在寻找最终的改进和短代码。

3 个答案:

答案 0 :(得分:5)

您命名道具顺序(因为不保证对象中键的顺序),然​​后通过提取相应的道具值来映射src数组。



var src = [{x:1,y:'a'},{x:2,y:'b'}]

var props = ['x', 'y'];

var result = props.map(prop => src.map(x => x[prop]))

console.log(result)




答案 1 :(得分:3)

您可以使用.reduce()

let src = [{x: 1, y: 'a'}, {x:2, y: 'b'}];

let result = src.reduce((a, c) => (a[0].push(c.x), a[1].push(c.y), a), [[], []]);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

<强>文档:

答案 2 :(得分:1)

您可以迭代数组,然后通过对象的键,并将外部和内部索引切换为目标元素。

&#13;
&#13;
var src = [{ x: 1, y: 'a' }, { x: 2, y: 'b' }],
    desc = [];

src.forEach(o => Object.keys(o).forEach((k, i) => (desc[i] = desc[i] || []).push(o[k])));

console.log(desc);
&#13;
&#13;
&#13;