如何使用带有下划线的另一个数组中的元素过滤数组?

how to filter array with elements from another array with underscore?

我有一个jsonarray A,但我想删除满足特定条件的元素。此条件是具有特定 id 的元素包含在另一个名为 B 的数组中。它们都包含相同的 id 属性.

假设数组如下所示:

A =[{"id":1},{"id":2},{"id":3}]
B =[{"id":1},{"id":2}]

所以我尝试创建的函数会导致:

result=[{"id":3}]

我试过了但没有用:

result= _.each(A, function(gl) {
  return _.each(B, function(tg) {
    if (tg.id != gl.id) {
      return gl;
    }
  });
});

尝试使用 reject 过滤掉不需要的值:

var A =[{"id":1},{"id":2},{"id":3}];
var B =[{"id":1},{"id":2}];
            
var result = _.reject(A, function(item) {
   return _.find(B, {id: item.id});
});

alert(JSON.stringify(result)); // [{"id":3}]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.js"></script>

可以用来检查 A 是否在 B 中的一些下划线方法是 findfindIndexwhere

哪里也可以:)

var A = _.reject(A, function(item) {
   return _.where(B, {id: item.id}).length > 0
});

轻松使用开源项目jinqJs

See Fiddle

var result = jinqJs().from(A).not().in(B, 'id').select();