我有一个对象数组,它有一个我试图联合在一起的数组属性。我已经用下面的代码解决了这个问题,它显示了我想要做的事情:
var dest = [];
_.forEach(parentArray, function (parentItem) {
_.forEach(parentItem.arrayProperty, function(arrayPropertyItem) {
dest.push(arrayPropertyItem);
});
});
这很好用。但我想知道lodash是否有任何快捷方法。我尝试使用unionBy / unionWith,但它似乎没有预期的结果。而只是简单地让我回到parentArray。
答案 0 :(得分:3)
查看flatMap和flatten。如果我了解您的数据结构(以及您要完成的任务),您应该能够做到这样的事情
var dest = _.flatMap(parentArray, function(item) {
return item.arrayProperty;
});
如有必要,您可以_.flatten
使用item.arrayProperty
,具体取决于您要完成的工作。如果arrayProperty
包含数组数组,则输出也将具有嵌套数组。如果它更深入,您可能需要使用flattenDeep。
var parentArray = [{item: 'one', children: [1, 2, 3]}, {item: 'two', children: [4, 5, 6]}];
var dest = _.flatMap(parentArray, function(item) {
return item.children;
});
console.log(dest);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
您可以通过在children
属性中添加嵌套数组并在必要时添加_.flatten
来解决这个问题。
答案 1 :(得分:2)
您可以将flatMap
与嵌套属性的名称一起用作第二个参数:
_.flatMap(parentArray, 'arrayProperty')
var parentArray = [{
arrayProperty: [1, 2]
}, {
arrayProperty: [3, 4]
}];
console.log( _.flatMap(parentArray, 'arrayProperty') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>