【发布时间】:2017-05-20 22:55:54
【问题描述】:
我最近一直在使用 lodash,我就是喜欢它。所以我正在努力学习它。
在过去的两天里,我一直试图弄清楚如何执行以下操作,但没有取得多大成功:考虑一个对象数组,每个对象在属性props...中都有一个对象数组...
let items = [{
name: 'first',
props: [{
id: 1,
name: 'one'
}, {
id: 2,
name: 'two'
}]
}, {
name: 'second',
props: [{
id: 2,
name: 'two'
}]
}, {
name: 'third',
props: [{
id: 1,
name: 'one'
}]
}];
...我想创建一个对象数组,其中包含 props 中所有项目的每个属性,每个对象都有一个 items 属性,所有项目都包含该属性,如下所示:
[{
id: 1,
name: 'one',
items : [] // array containing objects `first` and 'third'
},{
id: 2,
name: 'two',
items: [] // array containing objects `first` and 'second'
}]
我尝试了各种组合,灵感来自this question 的答案,这似乎是我能找到的最接近我正在尝试做的事情。我认为我真正的障碍是,当尝试创建一系列独特的道具时(我将把项目映射到那里)并尝试使用......
_(items).chain().flatten().pluck('props').unique().value()
...如this answer,它告诉我.chain(...).flatten(...).pluck 不是函数。我也尝试使用.map 而不是.pluck,但我想并不是所有在Underscore 中工作的东西都可以在Lodash 中工作(我不知道具体的区别,我刚读到Lodash 最初是从Underscore 分叉的)。
注意我知道如何使用经典的fors 来做到这一点,这只是一个练习。我没有实际用途。
我只是想学习充分利用lodash 的潜力。如果你知道怎么做,你甚至不必解释。我会console.log() 每一步,直到我明白发生了什么。另外,如果您认为我的问题名称可以改进,以便更好地索引,考虑到我想要实现的目标,我愿意接受建议。
理想情况下,答案应该是lodash 方法链,而不声明中间变量。我很确定这是可行的(这就是我问的原因)。当然,步骤越少越好——我认为它会影响现实生活场景中的性能,但这不是问题——我知道大多数时候,在追求性能时,经典的 for 循环很难打败。
【问题讨论】:
标签: javascript arrays grouping lodash