【问题标题】:Lodash Remove objects from array by matching ids arrayLodash 通过匹配 ids 数组从数组中删除对象
【发布时间】:2018-06-13 02:42:10
【问题描述】:

我有一个对象数组,例如:

var a = [
  {id: 1, name: 'A'},
  {id: 2, name: 'B'},
  {id: 3,  name: 'C'},
  {id: 4, name: 'D'}
];

我想从数组 a 中删除的 Ids 数组:

var removeItem = [1,2];

我想通过匹配 removeItem array 包含的 ID 从 array a 中删除对象。如何使用 lodash 实现。

我检查了 lodash 的 _.remove 方法,但这需要一个特定的条件才能从数组中删除一个项目。但我有我想要删除的 id 列表。

【问题讨论】:

  • 没有 lodash - a.filter( item => removeItem.indexOf( item.id ) == -1 );

标签: javascript arrays lodash


【解决方案1】:

正如您提到的,您需要_.remove 方法,您提到的具体条件是removeItem 数组是否包含数组的选中元素的id

var removeElements = _.remove(a, obj => removeItem.includes(obj.id));
// you only need to assign the result if you want to do something with the removed elements.
// the a variable now holds the remaining array

【讨论】:

    【解决方案2】:

    您必须将predicate 函数从lodash 传递给.remove 方法。

    var final = _.remove(a, obj => removeItem.indexOf(obj.id) > -1);
    

    使用indexOf 方法。

    indexOf() 方法返回给定元素所在的第一个索引 可以在数组中找到,如果不存在则为 -1。

    您可以使用filter 方法使用native javascript 来实现,该方法接受回调 函数作为参数。

    var a = [
      {id: 1, name: 'A'},
      {id: 2, name: 'B'},
      {id: 3,  name: 'C'},
      {id: 4, name: 'D'}
    ];
    var removeItem = [1,2];
    a = a.filter(function(item){ 
       return removeItem.indexOf( item.id ) == -1; 
    });
    console.log(a);

    但是filter 方法只是通过应用一个回调函数来创建一个新数组。

    来自文档

    filter() 方法创建一个包含所有通过的元素的新数组 由提供的函数实现的测试。

    如果要修改原始数组,请使用splice 方法。

    var a = [
      {id: 1, name: 'A'},
      {id: 2, name: 'B'},
      {id: 3,  name: 'C'},
      {id: 4, name: 'D'}
    ];
    var removeItem = [1,2];
    removeItem.forEach(function(id){
       var itemIndex = a.findIndex(i => i.id == id);
       a.splice(itemIndex,1);
    });
    console.log(a);

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多