在 JavaScript 中,使用 delete
操作符删除数组元素不会改变数组的长度。它会在被删除元素的位置留下一个空洞,用 undefined
表示。
例如:
let arr = [1, 2, 3, 4, 5];
delete arr[2]; // 删除索引为 2 的元素 (值是 3)
console.log(arr); // 输出: [1, 2, <1 empty item>, 4, 5]
console.log(arr.length); // 输出: 5 长度仍然是 5
console.log(arr[2]); // 输出: undefined
虽然 length
属性保持不变,但数组中存在 undefined
会影响一些数组方法的行为。例如:
forEach
会跳过空洞。map
会将空洞映射为undefined
。filter
会过滤掉空洞。join
会将空洞转换为空字符串。
如果想要真正删除元素并改变数组长度,应该使用以下方法:
splice()
: 这是最常用的方法。它可以删除指定位置的元素,并可以插入新元素。
let arr = [1, 2, 3, 4, 5];
arr.splice(2, 1); // 从索引 2 开始删除 1 个元素
console.log(arr); // 输出: [1, 2, 4, 5]
console.log(arr.length); // 输出: 4 长度变为 4
filter()
: 可以根据条件过滤数组元素,创建一个新数组。
let arr = [1, 2, 3, 4, 5];
let newArr = arr.filter((element, index) => index !== 2); // 保留索引不为 2 的元素
console.log(newArr); // 输出: [1, 2, 4, 5]
console.log(newArr.length); // 输出: 4 新数组长度为 4
总而言之,delete
操作符不是删除数组元素并缩短数组长度的最佳方法。 splice()
方法更适合用于此目的。 如果需要根据条件删除元素,filter()
方法也是一个不错的选择。