我正在尝试根据条件从数组中删除项目。
var Stack = {};
Stack.items = [];
Stack.items.push({
id: '123',
name: 'Lorem ipsum dolor sit.'
});
Stack.items.push({
id: '154',
name: 'Lorem ipsum dolor sit.'
});
Stack.items.push({
id: '123',
name: 'Lorem ipsum dolor sit.'
});
现在,我将删除所有154 id的项目。
$.each(Stack.items, function(index, item) {
// console.log( item.id );
// console.log( index);
if( item.id === '154' ) {
Stack.items.splice(index, 1);
}
});
但是我在第二次迭代中得到一个未定义的错误。我认为这是因为splice()函数修改了原始数组,因此索引被更改了
Uncaught TypeError: Cannot read property 'id' of undefined
我用lodash得到了预期的结果,但我不想仅仅针对这个问题使用它们
_.remove(Stack.items, function(item) {
return item.id === '123';
});
谢谢!
答案 0 :(得分:4)
如果必须需要进行修改,您将需要使用其他方法。如果未删除元素,则只能递增索引。一个例子是:
var index = 0;
while ( index < Stack.items.length ) {
var item = Stack.items[index];
if ( item.id === '154' )
Stack.items.splice(index, 1);
else
index++;
}
但是,创建数组的副本并使用它可以使代码更容易理解,并且编码速度更快:
var newItems = Stack.items.filter(function(item) {
return item.id !== '154';
});