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

例如,

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

我怎么才能把它清空?


当前回答

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

并调用它:array.clear();

其他回答

如果您正在使用

a = []; 

然后将新的数组引用分配给,如果中的引用已经分配给任何其他变量,那么它也不会清空该数组,因此垃圾收集器不会收集该内存。

例如。

var a=[1,2,3];
var b=a;
a=[];
console.log(b);// It will print [1,2,3];

or

a.length = 0;

当我们指定a.length时,我们只是重置数组和内存的边界,其余数组元素将由垃圾收集器连接。

而不是这两种解决方案更好。

a.splice(0,a.length)

and

while(a.length > 0) {
    a.pop();
}

根据kenshou.html先前的回答,第二种方法更快。

性能测试:

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

要清空数组的当前内存位置,请使用:“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);