Javascript / JQuery按属性交叉的对象数组

时间:2016-07-06 10:19:44

标签: javascript jquery arrays

给出两个数组:

col-md-10

我想知道让所有用户拥有在授权数组中出现的typeId的最简单方法。

在这种情况下,结果应为:

var users = [{ name: 'Alice', typeID: 1 }, { name: 'Bob', typeID: 2 }, { name: 'Carol', typeID: 3 }];
var authorized = [{ typeID: 1 }, { typeID: 2 }];

3 个答案:

答案 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;});

也许有一个更有效的解决方案,但它是从

开始的