Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将对象数组拆分为多个普通数组,其中每个数组由一个属性填充';s的价值观?_Javascript_Arrays_Lodash - Fatal编程技术网

Javascript 如何将对象数组拆分为多个普通数组,其中每个数组由一个属性填充';s的价值观?

Javascript 如何将对象数组拆分为多个普通数组,其中每个数组由一个属性填充';s的价值观?,javascript,arrays,lodash,Javascript,Arrays,Lodash,我有一个对象数组,如下所示: var GOM = [{name:"Kuroko",ability:"misdirection"}, {name:"Kise",ability:"perfect copy"}, {name: "Akashi", ability: "emperor's eye"}]; 是否可以使用lodash或本机javascript(非forEach)中的预定义函数将其拆分为2个数组 我知道我可以做到这一点: var names = [

我有一个对象数组,如下所示:

var GOM = [{name:"Kuroko",ability:"misdirection"},
           {name:"Kise",ability:"perfect copy"},
           {name: "Akashi", ability: "emperor's eye"}];
是否可以使用lodash或本机javascript(非forEach)中的预定义函数将其拆分为2个数组

我知道我可以做到这一点:

var names = [];
var abilities = [];
GOM.forEach(function(member){
  names.push(member.name);
  abilities.push(member.ability);
});
但我正在寻找另一种方法。

适用于此:

var GOM=[{name:“黑子”,能力:“误导”},{name:“Kise”,能力:“完美复制”},{name:“明石”,能力:“皇帝的眼睛”}];
变量名称=GOM.map(函数(项){
返回item.name;
});
变量能力=GOM.map(功能(项目){
返回项。能力;
});

警报(名称+'\n'+能力)您拥有的代码很好,但是如果您正在寻找更“功能性”的东西,那么总会有
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数据=[
{名字:“黑子”,能力:“误导”},
{名字:“Kise”,能力:“完美副本”},
{名字:“明石”,能力:“皇帝的眼睛”}
];
var names=u2;.pull(数据,'name');
var-abilities=u.pull(数据,'ability');
警报(JSON.stringify(name,null,4))
组合成一个包装:

var wrapper = _(GOM).map(_.values).unzip();
然后就很容易抓到这些名字:

wrapper.first()
// → [ "Kuroko", "Kise", "Akashi" ]
和能力:

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

你的方法不错。。。您寻找其他方法的原因是什么?forEach的
有什么问题?您是否正在寻找一些现成的方法来实现这一点?forEach没有任何问题。我只是想知道是否有另一个预定义函数可以实现相同的结果。所以reduce的第二个参数创建并初始化第一个函数的参数的属性?是的,这是正确的+1但请注意,这并不能保证顺序,因此根据代码要求,它可能不可用。
wrapper.last()
// → [ "misdirection", "perfect copy", "emperor's eye" ]