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

例如,

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

我怎么才能把它清空?


当前回答

这里是保持相同数组(“可变”)的最快工作实现:

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

使用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()

性能测试:

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

您可以将其添加到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),我倾向于同意。在决定如何处理这件事时请谨慎。

这里是保持相同数组(“可变”)的最快工作实现:

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