我有这个数组:
var arrA = [
{"id": 1, "name": "Manager", "assignable": true},
{"id": 2, "name": "Developer", "assignable": true},
{"id": 3, "name": "Reporter", "assignable": true}
{"id": 4, "name": "Position", "assignable": true},
{"id": 5, "name": "Mayor", "assignable": true},
{"id": 6, "name": "Porter", "assignable": true}];
var arrB = [1,4,5];
我在项目中使用 underscore.js 和 lodash.js
从arrA数组获取id等于arrB项目的所有项目的优雅方法是什么?
答案 0 :(得分:5)
最高性能和优雅的方式是使用lodash链接到.indexBy() 项目ID,然后使用 {{获取相关项目3}}:
git add

var arrA = [
{"id": 1, "name": "Manager", "assignable": true},
{"id": 2, "name": "Developer", "assignable": true},
{"id": 3, "name": "Reporter", "assignable": true},
{"id": 4, "name": "Position", "assignable": true},
{"id": 5, "name": "Mayor", "assignable": true},
{"id": 6, "name": "Porter", "assignable": true}
];
var arrB = [1,4,5];
var returnedItems = _(arrA)
.indexBy('id')
.at(arrB)
.value();
document.getElementById('results').innerText = JSON.stringify(returnedItems);

答案 1 :(得分:2)
这是一个lodash解决方案:
_.filter(arrA, _.flow(
_.identity,
_.property('id'),
_.partial(_.includes, arrB)
));
filter()函数返回一个只包含我们关心的项目的新数组。我们使用flow()函数构建一个相应过滤项目的回调 - 这是一个细分:
filter()
回调,我们只关心第一个。id
。arrB
中是否存在给定的ID。为此,我们使用partial()创建一个新函数,如果项目存在,则使用includes()返回true。此风格并非适合所有人,但 是紧凑的,而且 总重。