2015-10-15 22 views
3

使用片(在这种情况下,我发现在阵,企图片正确的项目,但数组保持完全一致):为什么我不能使用切片或lodash删除从此数组中删除项目?

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

+4

'.slice'不修改数组,它返回一个包含所选元素** **新阵。 – Barmar

+6

若要修改数组,请使用'.splice()'。 – Barmar

+0

啊,那就是答案! 'splice'想发布吗?我很好奇为什么删除lodash也没有工作,奖金:) –

回答

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

我认为这是我第一次进入lodash。该文件非常好。 – Barmar

+0

谢谢!我喜欢'lodash',看看那:)用1班轮替换了一个循环! –

+0

这几乎是lodash和underscore.js的要点。 – Barmar