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

14

有一个条件,我需要将对象数组转换为二维数组。

例如:

arrayTest = arrayTest[10 objects inside this array]

单个对象具有多个属性,我动态添加属性,因此不知道属性名称。

现在我想将这个对象数组转换为数组数组。

附言:如果我知道对象的属性名称,则可以进行转换。但我想要动态地做。

示例(如果我知道属性名称(firstName和lastName是属性名称))

var outputData = [];
for(var i = 0; i < inputData.length; i++) {
    var input = inputData[i];
    outputData.push([input.firstName, input.lastName]);
}
3个回答

34

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

var outputData = inputData.map(Object.values);


正是我所需要的!最佳答案。谢谢。 - Ryan
唯一的问题是,我必须从 obj 中收集键,然后使用 unshift 添加到第一个位置!否则,完美的一行代码! - FreeSoftwareServers

23

试试这个:

var output = input.map(function(obj) {
  return Object.keys(obj).sort().map(function(key) { 
    return obj[key];
  });
});

1
谢谢Sabof。 我得到了我想要的。 实际上我在使用jQuery Datatable,所以在你的帮助下我获得了数据。现在我需要Datatable列标题的属性名称。 你能告诉我如何获取单个对象的属性名吗? - KiddoDeveloper
@user3292436 只需使用这段代码:Object.keys(obj).sort() - sabof
嗨Sabof,我解决了我的问题,但是我无法理解MAP方法背后的逻辑。我在谷歌上搜索并找到了一些答案(它返回一个数组等),但是我仍然不明白。 你能解释一下吗? - KiddoDeveloper
@Mohit map 创建一个新的数组,其中每个项都是应用于原始数组中的项的 function 的结果。 - sabof
1
嗨@sabof,这里排序很重要吗?如果我不想改变我的值的顺序,我可以跳过它吗? - Alexis.Rolland

0
使用 for-in 循环。
var outputData = [];
for (var i in singleObject) {
    // i is the property name
    outputData.push(singleObject[i]);
}

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