📜  洛达什 | _.pull() 方法(1)

📅  最后修改于: 2023-12-03 15:26:58.335000             🧑  作者: Mango

洛达什 | _.pull() 方法

在 lodash 库中,_.pull() 方法是一种用于从数组中移除指定元素的方法。它可以以多种方式使用,使其成为数组操作中的“瑞士军刀”。

语法
_.pull(array, [values])

参数:

  • array:(Array)要修改的数组。
  • [values]:(...any)要移除的指定值。

返回值:

(Array)返回修改后的数组。

简单示例
const array = [1, 2, 3, 1, 2, 3];
_.pull(array, 2, 3);
console.log(array);
// output: [1, 1]

上述示例展示了基本的应用场景。我们首先创建一个包含 6 个元素的数组,然后使用 _.pull() 方法移除了值为 2 和 3 的所有元素。最终,我们得到了仅包含值为 1 的数组。

在对象数组中使用

当我们使用数组中的对象时,_.pull() 方法变得更加有用。我们可以传递对象属性的值来删除匹配的对象。例如:

const players = [
    { name: 'Tom', score: 100 },
    { name: 'Bob', score: 150 },
    { name: 'Sam', score: 120 },
    { name: 'Tim', score: 110 }
];

_.pull(players, { score: 150 });

console.log(players);
// output: [{ name: 'Tom', score: 100 }, { name: 'Sam', score: 120 }, { name: 'Tim', score: 110 }]

在这个示例中,我们创建了一个包含 4 个对象的数组。我们指定一个对象,该对象具有一个名为“score”的属性,并设置其值为 150。使用 _.pull() 方法移除了该对象,现在我们仅剩下其他三个对象。

需要注意的是,这是浅比较,如果数组中有两个值,它们的类型和值都相等,则 _.pull() 方法将同时删除这两个元素。

数组中移除多个值

该方法可以通过同时传递多值来移除数组中的多个元素。如:

const array = [1, 2, 3, 4, 5, 6, 7];
_.pull(array, 2, 4, 6);
console.log(array);
// output: [1, 3, 5, 7]

上述示例中传递了三个值给 _.pull(),并顺利的从数组中移除了所有这些值,仅剩下 1 3 5 7 的元素。

值得注意的是

_.pull() 方法的工作方式可能会意外地改变数组,尤其是在多个方法连用的时候。比如以下代码:

const array = [1, 2, 3, 4, 5, 6, 7];
_.map(_.pull(array, 2, 4, 6), n => n * 2);
console.log(array);
// output: [1, 3, 5, 7]

从输出结果可以看到,_.pull() 方法在由 _.map() 引用时会更改原数组。在这种情况下最好使用 _.clone() 创建原始数组的副本,然后使用 _.pull() 方法。如下所示:

const array = [1, 2, 3, 4, 5, 6, 7];
_.map(_.pull(_.clone(array), 2, 4, 6), n => n * 2);
console.log(array);
// output: [1, 2, 3, 4, 5, 6, 7]

这里,我们使用 _.clone() 方法创建了原始数组的一个副本,并将该副本传递给 _.pull()。这样,我们就可以在映射函数中修改数组值,而不会影响原始数组。

总结

_.pull() 方法是一个方便的工具,可以轻松从数组中删除指定的元素,使用起来非常简单。它在对象数组中的应用非常不错,并且可以使用多个参数一次性删除多个元素。但是,需要特别注意一下该方法的使用方式,以免在多个方法引用时意外地改变了我们的数组。