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

时间:2015-04-03 07:47:08

标签: javascript arrays json underscore.js

我有一个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;
    }
  });
});

3 个答案:

答案 0 :(得分:2)

尝试使用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>
&#13;
&#13;
&#13;

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

答案 1 :(得分:1)

哪里也可以:)

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

答案 2 :(得分:0)

轻松使用开源项目jinqJs

See Fiddle

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