繁体   English   中英

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

[英]JavaScript Deleting all objects from an array which contain a value

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

我怀疑事情会变得混乱,因为您在遍历数组的同时更改了数组。

_.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> 

我放弃了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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM