Javascript / Lodash - 从数组中删除项目(具有相同的ID)

时间:2018-01-09 21:41:52

标签: javascript arrays lodash

我正在尝试从包含多个对象的数组中删除项目,在某些情况下,它可能具有相同的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函数。

3 个答案:

答案 0 :(得分:6)

Lodash没有直接执行此功能(lodash#1114关闭为wontfix),但您可以使用_.findIndexArray#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;
&#13;
&#13;

答案 2 :(得分:0)

使用findIndex,它只找到第一个实例。然后filter数组删除索引号的元素。

&#13;
&#13;
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;
&#13;
&#13;