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

例如,

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

我怎么才能把它清空?


当前回答

到目前为止,支持票不少于2739票的答案是误导和错误的。

问题是:“如何清空现有阵列?”例如,对于A=[1,2,3,4]。

说“A=[]是答案”是无知的,绝对不正确。[]==[]为假。这是因为这两个阵列是两个独立的对象,具有各自的两种身份,在数字世界中占据各自的空间,各自独立。


假设你妈妈让你清空垃圾桶。

你不会把一个新的带进来,就好像你已经完成了被要求的事情。相反,你倒垃圾桶。你不会用新的空罐替换已填充的罐,也不会从已填充的罐子中取出标签“a”并将其粘贴到新的罐上,如a=[1,2,3,4];A=[];

清空数组对象是有史以来最简单的事情:

A.length = 0;

这样,“A”下的罐子不仅是空的,而且干净如新!


此外,在垃圾桶清空之前,您不需要手动清除垃圾!你被要求一次彻底清空现有的垃圾桶,直到垃圾桶变空后再去捡垃圾,如下所示:而(A长度>0){A.pop();}也不要把你的左手放在垃圾桶的底部,右手放在顶部,这样就可以把垃圾桶里的东西拿出来,如下所示:A.拼接(0,A.长度);

不,你被要求清空它:

A.length = 0;

这是唯一正确清空给定JavaScript数组内容的代码。

其他回答

关于这段时间,有很多困惑和错误信息;回答和评论中的pop/shift表现。while/pop解决方案的性能(如预期)最差。实际情况是,对于在循环中运行代码段的每个示例,安装程序只运行一次。如:

var arr = [];

for (var i = 0; i < 100; i++) { 
    arr.push(Math.random()); 
}

for (var j = 0; j < 1000; j++) {
    while (arr.length > 0) {
        arr.pop(); // this executes 100 times, not 100000
    }
}

我创建了一个工作正常的新测试:

http://jsperf.com/empty-javascript-array-redux

警告:即使在这个版本的测试中,您也看不到真正的差异,因为克隆阵列占用了大部分测试时间。它仍然表明拼接是清除阵列的最快方式(不考虑[],因为虽然它是最快的,但实际上并没有清除现有阵列)。

到目前为止,支持票不少于2739票的答案是误导和错误的。

问题是:“如何清空现有阵列?”例如,对于A=[1,2,3,4]。

说“A=[]是答案”是无知的,绝对不正确。[]==[]为假。这是因为这两个阵列是两个独立的对象,具有各自的两种身份,在数字世界中占据各自的空间,各自独立。


假设你妈妈让你清空垃圾桶。

你不会把一个新的带进来,就好像你已经完成了被要求的事情。相反,你倒垃圾桶。你不会用新的空罐替换已填充的罐,也不会从已填充的罐子中取出标签“a”并将其粘贴到新的罐上,如a=[1,2,3,4];A=[];

清空数组对象是有史以来最简单的事情:

A.length = 0;

这样,“A”下的罐子不仅是空的,而且干净如新!


此外,在垃圾桶清空之前,您不需要手动清除垃圾!你被要求一次彻底清空现有的垃圾桶,直到垃圾桶变空后再去捡垃圾,如下所示:而(A长度>0){A.pop();}也不要把你的左手放在垃圾桶的底部,右手放在顶部,这样就可以把垃圾桶里的东西拿出来,如下所示:A.拼接(0,A.长度);

不,你被要求清空它:

A.length = 0;

这是唯一正确清空给定JavaScript数组内容的代码。

如果您使用常量,则您别无选择:

const numbers = [1, 2, 3]

您不能重新设计:

numbers = []

您只能截断:

numbers.length = 0

您可以将其添加到JavaScript文件中,以允许“清除”数组:

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

然后可以这样使用:

var list = [1, 2, 3];
list.clear();

或者,如果你想确保你没有破坏一些东西:

if (!Array.prototype.clear) {
    Array.prototype.clear = function() {
       this.splice(0, this.length);
    };
}

很多人认为不应该修改本机对象(如Array),我倾向于同意。在决定如何处理这件事时请谨慎。

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

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)生成等效的数组