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

例如,

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

我怎么才能把它清空?


当前回答

要清空数组的当前内存位置,请使用:“myArray.length=0”或“myArray.cop()UN,直到其长度为0”

length:可以将length属性设置为随时截断数组。通过更改数组的长度属性来扩展数组时,实际元素的数量会增加。pop():pop方法从数组中移除最后一个元素,并返回移除的值。shift():shift方法移除第0个索引处的元素,并向下移动连续索引处的值,然后返回移除的值。

例子:

var arr = ['77'];
arr.length = 20;
console.log("Increasing : ", arr); // (20) ["77", empty × 19]
arr.length = 12;
console.log("Truncating : ", arr); // (12) ["77", empty × 11]

var mainArr = new Array();
mainArr = ['1', '2', '3', '4'];

var refArr = mainArr;
console.log('Current', mainArr, 'Refered', refArr);

refArr.length = 3;
console.log('Length: ~ Current', mainArr, 'Refered', refArr);

mainArr.push('0');
console.log('Push to the End of Current Array Memory Location \n~ Current', mainArr, 'Refered', refArr);

mainArr.poptill_length(0);
console.log('Empty Array \n~ Current', mainArr, 'Refered', refArr);

Array.prototype.poptill_length = function (e) {
  while (this.length) {
    if( this.length == e ) break;

    console.log('removed last element:', this.pop());
  }
};

new Array()|[]使用Array构造函数或数组文字创建具有新内存位置的Array。mainArr=[];//新的空数组被寻址到mainArr。var arr=新数组(“10”);//数组构造函数arr.unshift('1');//添加到前面arr.push('15');//添加到末尾console.log(“添加后:”,arr);//["1", "10", "15"]arr.pop();//从末端移除arr.shift();//从前面拆下console.log(“删除后:”,arr);//["10"]var arrLit=['14','17'];console.log(“array literal«”,indexedItem(arrLit));//{0,14}{1,17}函数索引项{var indexedStr=“”;arr.forEach(函数(项、索引、数组){indexedStr+=“{”+index+“,”+item+“}”;console.log(项,索引);});返回indexedStr;}slice():通过使用slice函数,我们从原始数组中获得一个元素的浅拷贝,带有新的内存地址,这样对clonerr的任何修改都不会影响到实际的|原始数组。var浅拷贝=mainArr.slice();//这是如何复制的var cloneArr=mainArr.切片(0,3);console.log('Main',mainArr,'\tCloned',cloneArr);克隆错误长度=0;//清除阵列的当前内存位置。console.log('Main',mainArr,'\tCloned',cloneArr);

其他回答

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

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

使用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.拼接(0);

我只是在我正在研究的一些代码上做了这个。它清除了数组。

性能测试:

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

您可以轻松地创建一个函数来实现这一点,更改长度,甚至将其作为remove()函数添加到本机Array中以供重用。

假设您有此阵列:

var arr = [1, 2, 3, 4, 5]; //the array

好的,只需运行以下命令:

arr.length = 0; //change the length

结果是:

[] //result

清空数组的简单方法。。。

也可以使用循环,这不是必须的,但只是另一种方法:

/* could be arr.pop() or arr.splice(0)
don't need to return as main array get changed */

function remove(arr) {
  while(arr.length) {
    arr.shift(); 
  }
}

你也可以考虑一些棘手的方法,例如:

arr.splice(0, arr.length); //[]

因此,如果arr有5项,它将从0拼接5项,这意味着数组中不会保留任何内容。

还有其他方法,例如简单地重新分配数组:

arr = []; //[]

如果您查看Array函数,有很多其他方法可以做到这一点,但最推荐的方法可能是更改长度。

正如我在开头所说的,你也可以原型remove(),因为它是你问题的答案。您可以简单地选择上面的方法之一,并将其原型化为JavaScript中的Array对象,例如:

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

您可以像这样调用它来清空javascript应用程序中的任何数组:

arr.remove(); //[]