我正在尝试从包含多个对象的数组中删除项目,在某些情况下,它可能具有相同的ID。这是数组:
var array = [{
"outletId": "OjHJ104",
"items": [{
"objectId": "lQnt4dmiPs",
"inCart": false,
},
{
"objectId": "lQnt4dmiPs",
"inCart": true,
},
{
"objectId": "lQnt4dmiPs",
"inCart": false,
},
{
"objectId": "lC6C96Ekua",
"inCart": true,
},
{
"objectId": "lC6C96Ekua",
"inCart": false,
},
{
"objectId": "lC6C96Ekua",
"inCart": true,
}
]
}];
我想说我想删除带有objectId的项目: lQnt4dmiPs
使用以下内容:
_.remove(array, { objectId: 'lQnt4dmiPs' });
它删除了该项目是真的;但是它会删除所有具有objectId的对象: lQnt4dmiPs ,这不是想要的行为。我想只删除一次(因为remove函数会触发onclick ..)。
我相信我在这里遗漏了一些东西,或者我应该使用另一个lodash函数。
答案 0 :(得分:6)
Lodash没有直接执行此功能(lodash#1114关闭为wontfix),但您可以使用_.findIndex
和Array#splice
:
var index = _.findIndex(array, { objectId: 'lQnt4dmiPs' })
// The second argument is the number of items to remove.
var removedItem = array.splice(index, 1)
答案 1 :(得分:1)
您可以随时快速推出自己的解决方案,这非常简单。
var array = [{
"outletId": "OjHJ104",
"items": [{
"objectId": "lQnt4dmiPs",
"inCart": false,
},
{
"objectId": "lQnt4dmiPs",
"inCart": true,
},
{
"objectId": "lQnt4dmiPs",
"inCart": false,
},
{
"objectId": "lC6C96Ekua",
"inCart": true,
},
{
"objectId": "lC6C96Ekua",
"inCart": false,
},
{
"objectId": "lC6C96Ekua",
"inCart": true,
}
]
}];
const remove = (arr, id) => {
for(let i=0; i<arr.length;i++) {
if(arr[i].objectId === id) {
arr.splice(i,1);
return;
}
}
}
remove(array[0].items,'lQnt4dmiPs');
console.log(array);
&#13;
答案 2 :(得分:0)
使用findIndex
,它只找到第一个实例。然后filter
数组删除索引号的元素。
var array = [{
"outletId": "OjHJ104",
"items": [{
"objectId": "lQnt4dmiPs",
"inCart": false,
},
{
"objectId": "lQnt4dmiPs",
"inCart": true,
},
{
"objectId": "lQnt4dmiPs",
"inCart": false,
},
{
"objectId": "lC6C96Ekua",
"inCart": true,
},
{
"objectId": "lC6C96Ekua",
"inCart": false,
},
{
"objectId": "lC6C96Ekua",
"inCart": true,
}
]
}];
const remove = (arr, str) => {
const elIdx = arr.findIndex(({objectId}) => objectId === str)
return arr.filter((_, idx) => idx !== elIdx)
}
console.log(remove(array[0].items, "lQnt4dmiPs"))
&#13;