📅  最后修改于: 2023-12-03 15:26:58.335000             🧑  作者: Mango
在 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() 方法是一个方便的工具,可以轻松从数组中删除指定的元素,使用起来非常简单。它在对象数组中的应用非常不错,并且可以使用多个参数一次性删除多个元素。但是,需要特别注意一下该方法的使用方式,以免在多个方法引用时意外地改变了我们的数组。