具有对象的数组和数组的Underscore JS差异

时间:2014-08-27 09:34:51

标签: javascript arrays underscore.js

我有一个包含某些数字的数组和一个包含某些对象的数组,如下所示:

var names = [
  { id: 1, name: 'Alex'},
  { id: 2, name: 'John'},
  { id: 3, name: 'Mary'}
];

var blocked_ids = [1, 2];

现在我想从names数组中删除带有blocked_ids的对象。结果就是这样:

[
  { id: 3, name: 'Mary'}
]

正如您所见,ID为1和2的对象已消失,因为数组“blocked_ids”包含这些数字。 如果只有两个数组,我可以使用_.difference(),但现在我必须将blocked_ids与数组对象中的id进行比较。谁知道怎么做?

3 个答案:

答案 0 :(得分:1)

假设您给出的block-ids是一个ID数组,您可以使用reject,如下所示

var arr = [ { id: 1,
    name: 'Alex'},
  { id: 2,
    name: 'John'},
  { id: 3,
    name: 'Mary'}
];

var block_ids = [1,2];
var result = _.reject(arr, function (obj) {
    return block_ids.indexOf(obj.id) > -1;
}); 

console.log(result);

DEMO

答案 1 :(得分:0)

您可以使用_.reject方法执行此操作。

例如:

_.reject(names, function(name) {
    return blockedIds.indexOf(name.id) > -1;
});

请参阅此JSFiddle

答案 2 :(得分:0)

纯ECMAScript解决方案:

names.filter(function(element) {
    return blocked_ids.indexOf(element.id) === -1}
);