有没有方法清空数组,如果有可能,可以使用.remove()?

例如,

A = [1,2,3,4];

我怎么才能把它清空?


当前回答

使用Jan最初建议的修改版本:

var originalLength = A.length;
for (var i = originalLength; i > 0; i--) {
     A.pop();
}

Terser公司:

for (let i = A.length; i > 0;A.pop(),i--) {}

或者这里是另一个例子:

while(!A[Symbol.iterator]().next().done)A.shift()

其他回答

如果您正在使用

a = []; 

然后将新的数组引用分配给,如果中的引用已经分配给任何其他变量,那么它也不会清空该数组,因此垃圾收集器不会收集该内存。

例如。

var a=[1,2,3];
var b=a;
a=[];
console.log(b);// It will print [1,2,3];

or

a.length = 0;

当我们指定a.length时,我们只是重置数组和内存的边界,其余数组元素将由垃圾收集器连接。

而不是这两种解决方案更好。

a.splice(0,a.length)

and

while(a.length > 0) {
    a.pop();
}

根据kenshou.html先前的回答,第二种方法更快。

我很惊讶还没有人提出这一点:

let xs = [1,2,3,4];
for (let i in xs)
    delete xs[i];

这会产生一个与其他解决方案截然不同的数组。从某种意义上说,数组已被“清空”:

xs
=> Array [ <4 empty slots> ]

[...xs]
=> Array [ undefined, undefined, undefined, undefined ]

xs.length
=> 4

xs[0]
=> ReferenceError: reference to undefined property xs[0]

可以使用[,,,]或array(4)生成等效的数组

A.拼接(0);

我只是在我正在研究的一些代码上做了这个。它清除了数组。

Array.prototype.clear = function() {
    this.length = 0;
};

并调用它:array.clear();

使用拼接方法清空数组A的内容是一种更易于跨浏览器且更优化的解决方案,如下所示:

A.拼接(0,A.长度);