2015-07-03 66 views
0

我有一個obj和一個對象數組 - 像下面的東西(我沒有粘貼它,因爲它的巨大)。我試圖循環對象數組 - 從數組中刪除那些包含值的對象。我寫了下面的代碼...(使用lodash)JavaScript從數組中刪除所有包含值的對象

當在數組上循環時,它隨機缺少一些'Foo's - 所以不是所有的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); 
    } 
    }); 
+0

好像你想要[Array.prototype.filter]( https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) – Grundy

回答

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>

+0

接受此作爲答案,因爲我的原始問題確實包括lodash – Rob

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); 
    } 
} 
+0

就像有效,這是我通常使用各種語言的原始數組來做事情 – Rhumborl

相關問題