如果我声明了一个新的Array()并添加了一个值,但是随后我想删除该值,该如何做呢?将value设置为null只会在该索引处创建一个null值,而通过拼接删除该索引会减小数组的大小。见下文:
class CustomArray {
constructor(size) {
this.arr = new Array(size)
}
describe() {
console.log(this.arr.length)
this.arr.forEach(num => console.log(num))
}
insert(idx, val) {
this.arr.splice(idx, 1, val)
}
remove(idx) {
this.arr[idx] = null
}
remove2(idx) {
this.arr.splice(idx, 1)
}
}
let myArr = new CustomArray(20)
myArr.insert(3, 100)
myArr.remove(3)
myArr.describe() //outputs 20 for length and `null`
let mySecondArr = new CustomArray(20)
mySecondArr.insert(3, 100)
mySecondArr.remove(3) //ouputs 19 for length
//how do I remove all values AND retain length?
答案 0 :(得分:2)
您可以使用package_dir
运算符。 delete
将在该特定索引处创建一个空插槽。根据{{3}}
删除数组元素时,数组长度不受影响。即使删除数组的最后一个元素,该设置仍然成立。
delete
答案 1 :(得分:1)
我相信您正在寻找delete arr[i]
。数组的长度不会改变,该值设置为undefined,但是map
和forEach
之类的函数也会忽略它,因此它们永远不会为删除的值运行代码。>