给出两个数组:
col-md-10
我想知道让所有用户拥有在授权数组中出现的typeId的最简单方法。
在这种情况下,结果应为:
var users = [{ name: 'Alice', typeID: 1 }, { name: 'Bob', typeID: 2 }, { name: 'Carol', typeID: 3 }];
var authorized = [{ typeID: 1 }, { typeID: 2 }];
答案 0 :(得分:3)
var result = users.filter(function(user) {
return authorized.some(function(authorizedObj) {
return authorizedObj.typeID === user.typeID;
});
})
应该注意的是,如果您的授权数组只包含ID而不包含对象(类似[1, 2]
),那么解决方案会更简单:
var result = users.filter(function(user) {
return authorized.indexOf(user.typeID) !== -1;
})
答案 1 :(得分:1)
这是一个简短的解决方案,具有线性复杂度, O(n + m),并且在Map
的帮助下。
var users = [{ name: 'Alice', typeID: 1 }, { name: 'Bob', typeID: 2 }, { name: 'Carol', typeID: 3 }],
authorized = [{ typeID: 1 }, { typeID: 2 }],
map = new Map,
result;
authorized.forEach(a => map.set(a.typeID, true));
result = users.filter(a => map.has(a.typeID));
console.log(result);

答案 2 :(得分:0)
您可以使用
var types = authorized.reduce(function(types, type) { types.push(type.typeID); return types; }, []);
var usersMatched = users.filter(function(user) { return types.indexOf(user.typeID) !== -1;});
也许有一个更有效的解决方案,但它是从
开始的