将对象数组变为包含具有公共属性的对象的分块数组的数组

时间:2016-01-12 05:41:48

标签: javascript lodash

我有一组对象都包含属性/public_html/ncpn

我希望将此数组变为数组数组,每个元素数组包含具有公共属性{em}的公共属性

它与lodash _.partition非常相似,除了它需要以递归方式发生不确定的次数,并且处于平坦级别而不是深度嵌套。

感谢您提供任何指导。

以下是一个示例数据结构:snail

snail

2 个答案:

答案 0 :(得分:1)

我已经玩了一点点并创建了以下代码片段,它以两种不同的方式完成您正在寻找的内容,第二种是我认为更优雅的方式:

var data = [ { snail: "bungalo", i: 1 }, { snail: 'bodego', i: 2 }, { snail: 'bodego', i: 3 }, { snail: 'pet rock', i: 4 }, { snail: "bungalo", i: 5 } ];

var multiPartitioned = _(data).uniq('snail').pluck('snail').map(function(snail) {
  return _.filter(data, 'snail', snail);
}).value();

var multiPartitionedMoreElegant = _(data).groupBy('snail').values().value();

console.log(multiPartitioned);
console.log(multiPartitionedMoreElegant);

您可以在CodePen上看到此示例: http://codepen.io/NicBright/pen/VeWXpj?editors=001

此致 尼古拉斯

答案 1 :(得分:1)

死亡简单怎么样:

bysnail = {};
objects.forEach(function(x){
    (bysnail[x.snail] || (bysnail[x.snail] = [])).push(x);
});

输出是将snail值映射到具有该值的对象列表的对象。