为什么我不能使用 slice 或 lodash remove 从这个数组中删除项目?
Why can't I remove item from this Array using slice or lodash remove?
使用切片(在这种情况下,我在数组中找到了正确的项目,尝试切片,但数组保持完全相同):
for (var i=0; i<vm.storedViews.length; i++) {
if (view_id === vm.storedViews[i].id) {
vm.storedViews.slice(i,1);
// vm.storedViews = _.remove(vm.storedViews, i);
break;
}
}
console.log('vm.storedViews',vm.storedViews);
使用 _.remove
所有项目最终都从我的数组中删除:
for (var i=0; i<vm.storedViews.length; i++) {
if (view_id === vm.storedViews[i].id) {
// vm.storedViews.slice(i,1);
vm.storedViews = _.remove(vm.storedViews, i);
break;
}
}
console.log('vm.storedViews',vm.storedViews);
使用.splice()
修改数组。 .slice
只是 returns 个选定的元素。
vm.storedViews.splice(i, 1);
_.remove()
不起作用,因为第二个参数不是索引,它是一个谓词函数——它删除函数 returns 为真值的数组的所有元素。看起来最接近 .splice()
的 lodash 函数是 _.pullAt()
。它需要删除一个数组索引列表,因此您可以将它用于您只想删除一个元素的情况:
_.pullAt(vm.storedViews, i);
您可以使用 _.findIndex()
:
而不是 for
循环
_.pullAt(vm.storedViews, _.findIndex(vm.storedViews, 'id', view_id));
如果ID是唯一的,您还可以使用:
_.remove(vm.storedViews, 'id', view_id);
使用切片(在这种情况下,我在数组中找到了正确的项目,尝试切片,但数组保持完全相同):
for (var i=0; i<vm.storedViews.length; i++) {
if (view_id === vm.storedViews[i].id) {
vm.storedViews.slice(i,1);
// vm.storedViews = _.remove(vm.storedViews, i);
break;
}
}
console.log('vm.storedViews',vm.storedViews);
使用 _.remove
所有项目最终都从我的数组中删除:
for (var i=0; i<vm.storedViews.length; i++) {
if (view_id === vm.storedViews[i].id) {
// vm.storedViews.slice(i,1);
vm.storedViews = _.remove(vm.storedViews, i);
break;
}
}
console.log('vm.storedViews',vm.storedViews);
使用.splice()
修改数组。 .slice
只是 returns 个选定的元素。
vm.storedViews.splice(i, 1);
_.remove()
不起作用,因为第二个参数不是索引,它是一个谓词函数——它删除函数 returns 为真值的数组的所有元素。看起来最接近 .splice()
的 lodash 函数是 _.pullAt()
。它需要删除一个数组索引列表,因此您可以将它用于您只想删除一个元素的情况:
_.pullAt(vm.storedViews, i);
您可以使用 _.findIndex()
:
for
循环
_.pullAt(vm.storedViews, _.findIndex(vm.storedViews, 'id', view_id));
如果ID是唯一的,您还可以使用:
_.remove(vm.storedViews, 'id', view_id);