如何取消设置数组中的条目?

时间:2019-04-30 14:31:25

标签: javascript arrays

如果我声明了一个新的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?

2 个答案:

答案 0 :(得分:2)

您可以使用package_dir运算符。 delete将在该特定索引处创建一个空插槽。根据{{​​3}}

  

删除数组元素时,数组长度不受影响。即使删除数组的最后一个元素,该设置仍然成立。

delete

答案 1 :(得分:1)

我相信您正在寻找delete arr[i]。数组的长度不会改变,该值设置为undefined,但是mapforEach之类的函数也会忽略它,因此它们永远不会为删除的值运行代码。