JavaScript从数组中删除包含值的所有对象

时间:2015-07-03 19:54:09

标签: javascript arrays

我有一个obj,有一系列对象 - 类似于下面的内容(我之前没有粘贴它,因为它很大)。我试图遍历对象数组 - 从数组中删除包含值的那些对象。我写了以下代码......(使用lodash)

当循环遍历数组时,它会随机丢失一些“Foo” - 所以不会删除所有Foo对象......即使它们包含密钥Foo。它确实忽略了那些不包含Foo的东西。

obj = {
      array : [
         {
          key1 : 'Foo',
          Key2 : 'fi'
         },
         {
          key1 : 'Foo',
          Key2 : 'fi',
          Key3 : 'blah'
         },
         {
          key1 : 'Fred',
          Key2 : 'fi'
         },
         {
          key1 : 'Foo',
          Key2 : 'fi'
         }
         ... etc....
      ]
}

  var items = obj.array
  _.forEach(items, function(n, index) {
   var isFoo = _.includes(n, 'Foo');
   console.log(isFoo);
   if (isFoo) {
      items.splice(index, 1);
    }
  });

2 个答案:

答案 0 :(得分:1)

我怀疑事情变得混乱,因为你在循环播放它的同时正在更改数组。

_.remove对您来说可能是更好的选择:



var obj = {
      array : [
         {
          key1 : 'Foo',
          Key2 : 'fi'
         },
         {
          key1 : 'Foo',
          Key2 : 'fi',
          Key3 : 'blah'
         },
         {
          key1 : 'Fred',
          Key2 : 'fi'
         },
         {
          key1 : 'Foo',
          Key2 : 'fi'
         }
      ]
};

_.remove(obj.array, function(n, index) {
    return _.includes(n, 'Foo');
});

console.dir(obj.array)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

我抛弃了lodash,然后做了一个反向for循环(我的想法是,当事情被删除时,索引会改变......也许这会导致错误?)

var items = obj.array;
var i;
for (i = items.length - 1; i >= 0; i -= 1) {
    if (items[i].type === 'Foo') {
        items.splice(i, 1);
    }
}