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; 
}); 

有人能解釋我在做什麼錯誤

+0

可能需要考慮排序順序也因爲對象鍵可以有不同的順序根據對象是如何構造的 – charlietfl

回答

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)

+0

應該返回'欄[關鍵]'地圖 – charlietfl

+0

是的,只是裏面注意到,修復 –

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]; 
    }); 
}); 
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; 
}); 
0

你的代碼是好的,只是兩個錯誤:

  1. 應返回「巴[關鍵]」代替內部地圖功能中的「foo [key]」。
  2. 應在外部地圖功能中返回「foobar」而不是「foo」。

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