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

10
var json = [{one: "text1", two: "text2", three: 3, four: 4},
            {one: "text3", two: "text4", three: 5, four: 6},
            {one: "text5", two: "text7", three: 8, four: 9}]

如何将上面的对象数组转换为下面的数组数组?

var array = [["text1", "text2", 3, 4], 
             ["text3", "text4", 5, 6], 
             ["text5", "text7", 8, 9]]

有没有 ES2015 函数可以帮助轻松转换它?如果没有,for 循环可能会做到。


2
你手头的是一个对象数组,而不是 JSON。 - Felix Kling
4个回答

19

你可以使用 mapObject.values

let array = json.map(obj => Object.values(obj));

1
Object.values虽然不是ES6。 - Felix Kling

7
您可以直接使用ES2017中提供的Object.values作为回调函数。

var array = [{ one: "text1", two: "text2", three: 3, four: 4 }, { one: "text3", two: "text4", three: 5, four: 6 }, { one: "text5", two: "text7", three: 8, four: 9 }],
    result = array.map(Object.values);
                
console.log(result);

一种古典的方法。

var array = [{ one: "text1", two: "text2", three: 3, four: 4 }, { one: "text3", two: "text4", three: 5, four: 6 }, { one: "text5", two: "text7", three: 8, four: 9 }],
    result = array.map(o => Object.keys(o).map(k => o[k]));
                
console.log(result);


同样的问题:Object.values 不是 ES6。可能可以使用,但由于 OP 只提到了 ES2015,值得至少指出一下。 - Felix Kling
Object.values 对我来说更加好用!谢谢 - Zaki Mohammed

5

如果需要显式指定顺序,您可以解构并映射每个项目:

var array = json.map(({ one, two, three, four }) => ([one, two, three, four]))

这也适用于原始对象中的无序键,例如:
var json = [{ two: "text2", one: "text1", three: 3, four: 4 },
            { one: "text3", three: 5, two: "text4", four: 6 },
            { four: 9, two: "text7", three: 8, one: "text5" }]

0

您也可以使用此代码片段 -

function convertObjCollToArrColl(json) {
    for (var i = 0, array = []; i < json.length; i++) {
        var el = json[i];
        array.push([el.one, el.two, el.three, el.four]);
    }
    
    return array;
}

convertObjCollToArrColl(json);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接