一、使用 Array.filter()
const arr = [1, 2, 3, 4, 5]; const result = arr.filter(item => item !== 3); console.log(result); // [1, 2, 4, 5]
使用 Array.filter() 可以方便的删除数组中指定元素,该方法传入一个回调函数,返回一个新的数组,新数组中只包含回调函数返回 true 的元素。以上面的数组为例,当回调函数返回 true 时,该元素会被添加到新数组中,反之则不会。因此回调函数中删除元素的逻辑便是当元素不等于指定元素时返回 true。
该方法不会改变原数组的内容,而是返回新的数组,因此也适用于功能上需要保留原数组的场景。
二、使用 Array.splice()
let arr = [1, 2, 3, 4, 5]; arr.splice(2, 1); console.log(arr); // [1, 2, 4, 5]
Array.splice() 可以用来删除某个位置的元素。第一个参数表示要删除元素的起始位置,第二个参数表示要删除的元素个数。以上面的数组为例,当我们想删除第三个元素时(下标从 0 开始计数),则传入 2(第三个元素在数组中的位置),传入 1(只删除一个元素)。
该方法会改变原数组的内容,因此需要谨慎使用。
三、使用 Array.pop() 和 Array.shift()
let arr = [1, 2, 3, 4, 5]; arr.pop(); console.log(arr); // [1, 2, 3, 4] arr.shift(); console.log(arr); // [2, 3, 4]
Array.pop() 用于删除数组末尾的元素,相当于删除最后一个元素。该方法没有参数,返回被删除的元素。
Array.shift() 用于删除数组开头的元素,相当于删除第一个元素。该方法没有参数,返回被删除的元素。
这两种删除方式,因为会改变数组的长度,所以需要注意循环遍历的问题或者在每次删除后重新获取数组长度。
四、使用 Object.assign()
let arr = [1, 2, 3, 4, 5]; const indexToDelete = 2; const result = Object.assign([], arr.slice(0, indexToDelete), arr.slice(indexToDelete + 1)); console.log(result); // [1, 2, 4, 5]
使用 Object.assign() 可以实现类似复制对象的功能。以上面的数组为例,我们可以使用 slice() 方法获取指定位置之前和之后的数组,然后使用 Object.assign() 将两个数组组合成一个新数组。该方法会返回一个新数组,不会改变原数组的内容。
总结
以上是几种常见的删除 JavaScript 数组元素的方法。根据实际场景选择不同的方法可以带来更好的性能和代码可读性。其中使用 Array.filter() 和 Object.assign() 方法可以实现不改变原数组内容,适用于需要保留原数组的情况。而使用 Array.splice()、Array.pop() 和 Array.shift() 方法则会改变原数组内容,需要注意遍历和数组长度的问题。