如何将对象数组返回到数组?

时间:2017-02-06 23:11:41

标签: javascript object multidimensional-array array.prototype.map

我一直在尝试使用map / filter / reduce函数,我想避免使用for循环。

我想转动对象数组

var foo = [{"z":5, "y":10, "x":15}, {"z":30, "y":40, "x":50}];

进入多维数组。基本上最终输出应该是[[5,10,15],[30,40,50]],没有对象,只有数组。 我知道如何为单个对象做到这一点:

Object.keys(foo[0]).map(function(key) { 
  return foo[0][key]; 
});

给了我第一个数组[5,10,15]。但我想让它迭代其余的所以我知道我需要一个.map函数。到目前为止,我有:

foo.map(function(bar) {
        var foobar = Object.keys(bar).map(function(key){ 
            return foo[key]; 
        }); 
    return foo; 
});

有人可以解释我做错了吗

4 个答案:

答案 0 :(得分:1)

有一种非常简单的方法可以做到这一点:

var newFoo = foo.map(el=>Object.values(el));

这是现代的ES2017代码。 Object.values获取数组中对象的值。代码说“对于foo中的每个元素,获取对象的值并将它们返回到数组中”。

您可以使用以下内容在2017年之前的代码中执行此操作:

var newFoo = foo.map(function(el) {
    var values = [];
    for (var key in el) {
        if (el.hasOwnProperty(key)) {
            values.push(el[key]);
        }
    }
    return values;
});

答案 1 :(得分:0)

您有return test;代替return the Object.keys逻辑



var foo = [{"z":5, "y":10, "x":15}, {"z":30, "y":40, "x":50}];

var fooArray = foo.map(function(bar) {
    return Object.keys(bar).map(function(key){ 
        return bar[key]; 
    }); 
});

console.log(fooArray)




答案 2 :(得分:0)

尝试:

// for each object in the array
foo.map(function(bar) {
    // return an array
    // containing the values of each key in the object
    return Object.keys(bar).map(function(key){ 
        return bar[key]; 
    }); 
});

答案 3 :(得分:0)

您的代码很好,只有两个错误:

  1. 应该返回" bar [key]"而不是" foo [key]"在内部地图功能。
  2. 应该返回" foobar"而不是" foo"在外部地图功能。
  3. 
    
    foo.map(function(bar) {
            var foobar = Object.keys(bar).map(function(key){ 
                return bar[key]; 
            }); 
        return foobar; 
    });