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

例如,

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

我怎么才能把它清空?


当前回答

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

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

其他回答

如果您对内存分配感兴趣,可以使用jsfiddle这样的东西与chrome开发工具的时间线选项卡来比较每种方法。您将希望在“清除”阵列后使用底部的垃圾箱图标强制垃圾收集。这将为您选择的浏览器提供更明确的答案。这里的很多答案都是旧的,我不会依赖它们,而是像上面@tanguy_k的答案那样进行测试。

(有关上述选项卡的介绍,您可以在此处查看)

Stackoverflow迫使我复制jsfiddle,所以这里是:

<html>
<script>
var size = 1000*100
window.onload = function() {
  document.getElementById("quantifier").value = size
}

function scaffold()
{
  console.log("processing Scaffold...");
  a = new Array
}
function start()
{
  size = document.getElementById("quantifier").value
  console.log("Starting... quantifier is " + size);
  console.log("starting test")
  for (i=0; i<size; i++){
    a[i]="something"
  }
  console.log("done...")
}

function tearDown()
{
  console.log("processing teardown");
  a.length=0
}

</script>
<body>
    <span style="color:green;">Quantifier:</span>
    <input id="quantifier" style="color:green;" type="text"></input>
    <button onclick="scaffold()">Scaffold</button>
    <button onclick="start()">Start</button>
    <button onclick="tearDown()">Clean</button>
    <br/>
</body>
</html>

您应该注意,这可能取决于数组元素的类型,因为javascript管理字符串的方式不同于其他基本类型,更不用说对象数组了。类型可能会影响发生的情况。

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

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

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

const numbers = [1, 2, 3]

您不能重新设计:

numbers = []

您只能截断:

numbers.length = 0

如果您需要保留原始数组,因为您对它的其他引用也应该更新,则可以通过将其长度设置为零来清除它而不创建新数组:

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

并调用它:array.clear();