我关注了一系列对象。数组中的每个对象都包含用户信息。
var usersAll = [
{ id: '1', name: 'User 1', selected: true },
{ id: '2', name: 'User 2' },
{ id: '3', name: 'User 3' },
{ id: '4', name: 'User 4' }];
我想提取为selected
设置为true
的用户。
这是我使用
的代码var selectedUsers = _(usersAll)
.filter(function(u) {
return u.selected
})
.map(function(u) {
return u.name
}
.value()
但由于某种原因,它会返回:
TypeError:_(...)。filter(...)。value不是函数
我做错了什么?
答案 0 :(得分:2)
selected
值为true
。Pluck
获取name
。
var usersAll = [{id: '1', name: 'User 1', selected: true},
{ id: '2', name: 'User 2'},
{ id: '3', name: 'User 3'},
{ id: '4', name: 'User 4', selected: true}
];
var selectedUserNames = _.pluck(_.filter(usersAll, 'selected'), 'name');
console.log(selectedUserNames);
document.write(selectedUserNames);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.min.js"></script>
如果您不想使用任何库,可以使用Array#filter
和Array#map
在JavaScript中完成此操作。
var usersAll = [{id: '1', name: 'User 1', selected: true},
{ id: '2', name: 'User 2'},
{ id: '3', name: 'User 3'},
{ id: '4', name: 'User 4', selected: true}
];
var selectedUserNames = usersAll.filter(function(e) {
return e.selected;
}).map(function(e) {
return e.name;
});
console.log(selectedUserNames);
document.write(selectedUserNames);
使用 EcmaScript 6 / ES15 箭头功能,可以在一行中完成
usersAll.filter(e => e.selected).map(e => e.name);
答案 1 :(得分:0)
对于使用 4.0.1
及更高版本的用户,如果您使用 each()
进行链接,似乎可能存在问题。检查这个https://github.com/lodash/lodash/issues/1879
问题可能类似于 Uncaught TypeError: _(...).filter(...).each(...).value is not a function
解决方案是显式调用 chain
方法
_.chain(usersAll) // instead of _(usersAll)
... // other chaining
.each(function(u) {
...
}
.value()