有没有方法清空数组,如果有可能,可以使用.remove()?
例如,
A = [1,2,3,4];
我怎么才能把它清空?
有没有方法清空数组,如果有可能,可以使用.remove()?
例如,
A = [1,2,3,4];
我怎么才能把它清空?
当前回答
A.拼接(0);
我只是在我正在研究的一些代码上做了这个。它清除了数组。
其他回答
如果您使用常量,则您别无选择:
const numbers = [1, 2, 3]
您不能重新设计:
numbers = []
您只能截断:
numbers.length = 0
使用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()
这里是保持相同数组(“可变”)的最快工作实现:
function clearArray(array) {
while (array.length > 0) {
array.pop();
}
}
仅供参考,它不能简化为while(array.pop()):测试将失败。
仅供参考,Map和Set定义clear(),Array也可以使用clear(()。
TypeScript版本:
function clearArray<T>(array: T[]) {
while (array.length > 0) {
array.pop();
}
}
相应的测试:
describe('clearArray()', () => {
test('clear regular array', () => {
const array = [1, 2, 3, 4, 5];
clearArray(array);
expect(array.length).toEqual(0);
expect(array[0]).toEqual(undefined);
expect(array[4]).toEqual(undefined);
});
test('clear array that contains undefined and null', () => {
const array = [1, undefined, 3, null, 5];
clearArray(array);
expect(array.length).toEqual(0);
expect(array[0]).toEqual(undefined);
expect(array[4]).toEqual(undefined);
});
});
这里是更新的jsPerf:http://jsperf.com/array-destroy/32 http://jsperf.com/array-destroy/152
jsPerf脱机。类似基准:https://jsben.ch/hyj65
Array.prototype.clear = function() {
this.length = 0;
};
并调用它:array.clear();
如果您对内存分配感兴趣,可以使用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管理字符串的方式不同于其他基本类型,更不用说对象数组了。类型可能会影响发生的情况。