为什么我不能使用slice或lodash remove从此数组中删除项目?

时间:2015-10-15 21:24:42

标签: javascript arrays lodash splice

使用切片(在这种情况下,我在数组中找到正确的项目,尝试切片,但数组保持完全相同):

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);

enter image description here

1 个答案:

答案 0 :(得分:6)

使用.splice()修改数组。 .slice只返回选定的元素。

vm.storedViews.splice(i, 1);

_.remove()没有用,因为第二个参数不是索引,它是一个谓词函数 - 它删除了函数返回truthy值的数组的所有元素。看起来.splice()最接近的lodash函数是_.pullAt()。它需要删除一个数组索引列表,因此您可以将它用于您只想删除一个元素的情况:

_.pullAt(vm.storedViews, i);

您可以使用for

代替_.findIndex()循环
_.pullAt(vm.storedViews, _.findIndex(vm.storedViews, 'id', view_id));

如果ID是唯一的,您还可以使用:

_.remove(vm.storedViews, 'id', view_id);