Chain + filter + value 返回值不就是一个函数吗?
Chain + filter + value returning value is not a function?
我关注了一系列对象。数组中的每个对象都包含用户信息。
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()
但出于某种原因 returns 这个:
TypeError: _(...).filter(...).value is not a function
我做错了什么?
- 过滤数组以保留
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>
如果您不想使用任何库,可以在 JavaScript 中使用 Array#filter
and Array#map
。
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);
对于使用 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()
我关注了一系列对象。数组中的每个对象都包含用户信息。
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()
但出于某种原因 returns 这个:
TypeError: _(...).filter(...).value is not a function
我做错了什么?
- 过滤数组以保留
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>
如果您不想使用任何库,可以在 JavaScript 中使用 Array#filter
and Array#map
。
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);
对于使用 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()