我一直在尝试使用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;
});
有人可以解释我做错了吗
答案 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)
您的代码很好,只有两个错误:
foo.map(function(bar) {
var foobar = Object.keys(bar).map(function(key){
return bar[key];
});
return foobar;
});