0

我一直在尝试使用 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

4 回答 4

2

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

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;
});
于 2017-02-06T23:28:00.430 回答
0

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

  1. 应该在内部映射函数中返回“bar[key]”而不是“foo[key]”。
  2. 应该在外部映射函数中返回“foobar”而不是“foo”。

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

于 2017-02-07T00:17:34.330 回答
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)

于 2017-02-06T23:15:14.433 回答
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]; 
    }); 
});
于 2017-02-06T23:17:01.300 回答