簡體   English   中英

如何將一個對象數組拆分成多個普通數組,其中每個數組都由一個屬性的值填充?

[英]How to split an array of objects into multiple normal arrays where each array is populated by one property's values?

我有一個對象數組如下:

var GOM = [{name:"Kuroko",ability:"misdirection"},
           {name:"Kise",ability:"perfect copy"},
           {name: "Akashi", ability: "emperor's eye"}];

是否可以使用lodash中的某些預定義函數或本機javascript(不是forEach)將其拆分為2個數組。

["Kuroko","Kise","Akashi"] and ["misdirection","perfect copy","emperor's eye"]

我知道我可以這樣做:

var names = [];
var abilities = [];
GOM.forEach(function(member){
  names.push(member.name);
  abilities.push(member.ability);
});

但我正在尋找另一種方式。

map()values()unzip()組合成包裝器:

var wrapper = _(GOM).map(_.values).unzip();

然后很容易獲取名稱:

wrapper.first()
// → [ "Kuroko", "Kise", "Akashi" ]

和能力:

wrapper.last()
// → [ "misdirection", "perfect copy", "emperor's eye" ]

Array.map()適用於此:

 var GOM = [{name:"Kuroko",ability:"misdirection"},{name:"Kise",ability:"perfect copy"},{name: "Akashi", ability: "emperor's eye"}]; var names = GOM.map(function(item) { return item.name; }); var abilities = GOM.map(function(item) { return item.ability; }); alert(names + '\\n' + abilities); 

你擁有的代碼很好,但是如果你正在尋找更具“功能性”的東西,那么總會reduce

var GOM = [ { name: "Kuroko", ability: "misdirection" },
            { name: "Kise", ability: "perfect copy" },
            { name: "Akashi", ability: "emperor's eye" } ];

var result = GOM.reduce(function(memo, member) {
  memo.names.push(member.name);
  memo.abilities.push(member.ability);
  return memo;
}, { names: [], abilities: [] });

console.log(result.names);
// => [ "Kuroko", "Kise", "Akashi" ]

console.log(result.abilities);
// => [ "misdirection", "perfect copy", "emperor's eye" ]

看起來沒有什么比Lodash的兩個更短的了:

 var data = [ {name:"Kuroko",ability:"misdirection"}, {name:"Kise",ability:"perfect copy"}, {name: "Akashi", ability: "emperor's eye"} ]; var names = _.pluck(data, 'name'); var abilities = _.pluck(data, 'ability'); alert(JSON.stringify(names, null, 4)); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM