var list1 =[{user: "A", id: 'a'},
{user: "B", id: 'b'},
{user: "C", id: 'c'},
{user: "D", id: 'd'},
{user: "E", id: 'e'}];
var list2 = ["A","B","C"];
我有两个数组,我想使用list2过滤list1。我的输出应为[{id:' a'},{id:' b'},{id:' c'}]或仅['} ;一个'' b'' C']
我正在按照以下方式过滤,但没有得到任何结果。这有什么不对?
var ids = _.filter(list1, function(id) {
_.each(list2, function(name){
return id.user === name;
});
});
答案 0 :(得分:3)
在普通的Javascript中,您只需过滤数组,然后将id
映射到结果集。
var list1 =[{ user: "A", id: 'a' }, { user: "B", id: 'b' }, { user: "C", id: 'c' }, { user: "D", id: 'd' }, { user: "E", id: 'e' }],
list2 = ["A","B","C"],
result = list1.filter(a => list2.includes(a.user)).map(a => a.id);
console.log(result);
使用下划线
_.pluck
用于获取属性的值,_.contains
检查值是否在数组中_.filter
用于返回子集。
var list1 =[{ user: "A", id: 'a' }, { user: "B", id: 'b' }, { user: "C", id: 'c' }, { user: "D", id: 'd' }, { user: "E", id: 'e' }],
list2 = ["A","B","C"],
result = _.pluck(_.filter(list1, a => _.contains(list2, a.user)), 'id');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
答案 1 :(得分:2)
filter
内的函数应返回一个布尔含义&#34;保持&#34;或者&#34;不要保留它&#34;。 each
对数组的每个元素执行操作,但不返回任何内容。
简单的解决方法是使用find
代替each
:
var ids = _.filter(list1, function(id) {
return _.find(list2, function(name) { return id.user === name; });
});
要仅提取ID,请使用map
:
ids = ids.map(function(user){ return user.id });