有没有方法清空数组,如果有可能,可以使用.remove()?
例如,
A = [1,2,3,4];
我怎么才能把它清空?
有没有方法清空数组,如果有可能,可以使用.remove()?
例如,
A = [1,2,3,4];
我怎么才能把它清空?
当前回答
性能测试:
http://jsperf.com/array-clear-methods/3
a = []; // 37% slower
a.length = 0; // 89% slower
a.splice(0, a.length) // 97% slower
while (a.length > 0) {
a.pop();
} // Fastest
其他回答
这里是保持相同数组(“可变”)的最快工作实现:
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
如果您使用常量,则您别无选择:
const numbers = [1, 2, 3]
您不能重新设计:
numbers = []
您只能截断:
numbers.length = 0
Array.prototype.clear = function() {
this.length = 0;
};
并调用它:array.clear();
使用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.length = 0;