Lodash的documentation for map()
包含一个这样的例子:
var users = [{'user': 'barney'}, {'user': 'fred'}];
_.map(users, 'user'); // => ['barney', 'fred']
我有类似的数据,但是嵌套了。他们是一个对象数组,但我有一个对象数组,每个对象都包含一个对象数组。扩展Lodash示例,我的数据是这样的:
var users = [
{'mapping': [{'user': 'barney'}, {'user': 'fred'}]},
{'mapping': [{'user': 'sherlock'}, {'user': 'watson'}]},
];
我想取回所有这四个名字。 (可以接受一组数组。)
我尝试了很多方法来做到这一点。你可以看到我的尝试:https://runkit.com/lsloan0000/lodash-map-nested
最终,我找到了这个解决方案:
// I didn't think it would take this much code
_.map(users, function (value, key, collection) {
return _.map(value.mapping, 'user');
});
我认为Lodash有很多功能,我不需要使用回调函数。
有没有更简单的方法来实现这个目标?
我知道我可以跳过key
和collection
个参数。最后,我计划让此代码返回对象,其mapping
包含两个特定名称。 (所有带有映射的对象为" fred"和#34; barney"在一起。)所以我在那里留下了那些论点,因为我认为我会为此目的而需要它们。
答案 0 :(得分:0)
使用_.flatMap()
将嵌套数组展平为单个数组,然后将其映射到user
值:
var users = [
{'mapping': [{'user': 'barney'}, {'user': 'fred'}]},
{'mapping': [{'user': 'sherlock'}, {'user': 'watson'}]},
];
var result = _(users)
.flatMap('mapping')
.map('user')
.value();
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
没有lodash链:
var users = [
{'mapping': [{'user': 'barney'}, {'user': 'fred'}]},
{'mapping': [{'user': 'sherlock'}, {'user': 'watson'}]},
];
var result = _.map(_.flatMap(users, 'mapping'), 'user');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>