2 tjh666slj tjh666slj 于 2016.01.25 09:25 提问

关于数组清空arr = []方法和arr.length = 0方法的性能比较

下面是总结的几种清空数组的方法直接上代码:

var arr = [1,5,2,6,5,22,60];
function empty()
{
    arr = [];
    /*
        arr = []意味着赋值给新数组变量,而其他引用不受影响。这意味着对先前数组的赋值任然保留在内存中,从而导致内存泄露。
    */
    arr.length = 0;
    /*
        arr.length = 0;删除当前数组中的全部内容但不影响与其他的关联性
    */
    arr.splice(0,arr.length);
    /*
        数组方法删除  splice(开始位置,长度)
    */
    while(arr.length)
    {
        arr.pop();          //后面删除
        //arr.shift();        前面删除
    }
};
empty();

console.log(arr);  //输出为[]

求大神指点arr = []方法和arr.length = 0方法的优劣,到底哪种性能高,看了两篇文章说法不一.....

4个回答

rui888
rui888   Ds   Rxr 2016.01.25 09:44
tjh666slj
tjh666slj   2016.01.25 09:59

var arr = [1,2,3];
var Arr = [4,5,6];

var arr2 = arr;
var Arr2 = Arr;

arr = [];
Arr.length = 0;
/*
    然而如果你想复制一个数组的副本,若用Arr.length = 0;删除数组内容,那么副本也将会失去内容
*/
console.log(arr,arr2,Arr,Arr2);
/*
    [],
    [1,2,3],
    [],
    []
*/

91program
91program   Ds   Rxr 2016.01.25 10:05

只要功能正确,没有内存泄露,这两句对性能的影响应该不大吧!讨论这个问题,是纯学术派啊!
你可以使用 Tick Count 测试一下这两句的执行时间,估计是没有什么区别。如果一句测试不出来,你可以循环调用 100万次,进行耗时测试。

enpterexpress
enpterexpress   Rxr 2016.01.25 09:36

性能高是不是说赋值的快

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
for循环中i=0与i=arr.length容易被忽视的bug
for循环中的这两种写法 for(var i=0,len=arr.length;i){ } 上面这种是最为常见也是初学者经常写的 而下面这种写法,在性能上则是比上面的更好,然而我们今天要讨论的并不是这两者性能上的区别,而是第一种写法有时候会带来一些让人毫无头绪的bug。 for(var i=arr.length;i--;){ } 今天写一个h5的视
使用java操作数组排序
package com.green.liu.sort; /* * AUTHOR:刘青青 * DATE:2012年8月10号 */ public class Sort { /* * 插入排序方法,对整数数组从小到大的排序 */ public void insertSortAsc(int arr[]) { for (int i = 1; i < arr.length; i++) { int insertVal = arr[i]; int index = i - 1; while (index >= 0 && insertVal < arr[index]) { arr[index + 1] = arr[index]; index--; } index++; arr[index] = insertVal; } } /* * 插入排序方法,对float数组从小到大的排序 */ public void insertSortAsc(float arr[]) { for (int m = 1; m < arr.length; m++) { float insertVal = arr[m]; int index = m - 1; for (; index >= 0; index--) { if (insertVal < arr[index]) { arr[index + 1] = arr[index]; arr[index] = insertVal; } } } } /* * 插入排序方法,对double数组从小到大的排序 */ public void insertSortAsc(double arr[]) { for (int m = 1; m < arr.length; m++) { double insertVal = arr[m]; int index = m - 1; for (; index >= 0; index--) { if (insertVal < arr[index]) { arr[index + 1] = arr[index]; arr[index] = insertVal; } } } } /* * 插入排序方法,对整数数组从大到小的排序 */ public void insetSortDesc(int arr[]) { for (int i = 1; i < arr.length; i++) { int insertVal = arr[i]; int index = i - 1; while (index >= 0 && insertVal > arr[index]) { arr[index + 1] = arr[index]; index--; } index++; arr[index] = insertVal; } } /* * 插入排序方法,对float数组从大到小的排序 */ public void insetSortDesc(float arr[]) { for (int m = 1; m < arr.length; m++) { float insertVal = arr[m]; int index = m - 1; for (; index >= 0; index--) { if (insertVal > arr[index]) { arr[index + 1] = arr[index]; arr[index] = insertVal; } } } } /* * 插入排序方法,对float数组从大到小的排序 */ public void insetSortDesc(double arr[]) { for (int m = 1; m < arr.length; m++) { double insertVal = arr[m]; int index = m - 1; for (; index >= 0; index--) { if (insertVal > arr[index]) { arr[index + 1] = arr[index]; arr[index] = insertVal; } } } } /* * 冒泡排序方法,对int数组从小到大的排序 */ public void bubbleSortAsc(int arr[]) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } /* * * 冒泡排序方法,对int数组从大到小的排序 */ public void bubbleSortDesc(int arr[]) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] < arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } /* * 冒泡排序方法,对float数组从小到大的排序 */ public void bubbleSortAsc(float arr[]) { float temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } /* * * 冒泡排序方法,对float数组从大到小的排序 */ public void bubbleSortDesc(float arr[]) { float temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] < arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } /* * 冒泡排序方法,对double数组从小到大的排序 */ public void bubbleSortAsc(double arr[]) { double temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } /* * * 冒泡排序方法,对double数组从大到小的排序 */ public void bubbleSortDesc(double arr[]) { double temp = 0; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] < arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } /* * 快速排序方法,对int数组从小到大的排序 */ public void quickSortAsc(int left, int right, int arr[]) { int l = left; int r = right; int temp = 0; int pivot = arr[(left + right) / 2]; while (l < r) { while (arr[l] < pivot) l++; while (arr[r] < pivot) r++; if (l >= r) break; temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; if (arr[l] == pivot) --r; if (arr[r] == pivot) ++l; } } /* * 快速排序方法,对int数组从大到小的排序 */ public void quickSortDesc(int arr[]) { } /* * 选择排序,对int数组由小到大 */ public void selectSortAsc(int arr[]) { int tempValue = 0; for (int i = 0; i < arr.length - 1; i++) { int min = arr[i]; int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; minIndex = j; } } tempValue = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tempValue; } } /* * 选择排序,对int数组由大到小 */ public void selectSortDesc(int arr[]) { int tempValue = 0; for (int i = 0; i < arr.length - 1; i++) { int min = arr[i]; int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (min < arr[j]) { min = arr[j]; minIndex = j; } } tempValue = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tempValue; } } /* * 选择排序,对float数组由小到大 */ public void selectSortAsc(float arr[]) { float tempValue = 0; for (int i = 0; i < arr.length - 1; i++) { float min = arr[i]; int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; minIndex = j; } } tempValue = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tempValue; } } /* * 选择排序,对float数组由大到小 */ public void selectSortDesc(float arr[]) { float tempValue = 0; for (int i = 0; i < arr.length - 1; i++) { float min = arr[i]; int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (min < arr[j]) { min = arr[j]; minIndex = j; } } tempValue = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tempValue; } } /* * 选择排序,对float数组由小到大 */ public void selectSortAsc(double arr[]) { double tempValue = 0; for (int i = 0; i < arr.length - 1; i++) { double min = arr[i]; int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (min > arr[j]) { min = arr[j]; minIndex = j; } } tempValue = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tempValue; } } /* * 选择排序,对float数组由大到小 */ public void selectSortDesc(double arr[]) { double tempValue = 0; for (int i = 0; i < arr.length - 1; i++) { double min = arr[i]; int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (min < arr[j]) { min = arr[j]; minIndex = j; } } tempValue = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = tempValue; } } public static void main(String[] args) { // TODO Auto-generated method stub int arr[] = { 3, 68, -1, 0, 100, 90, 78, 787, 899, 90 }; Sort sort = new Sort(); sort.selectSortAsc(arr); for (int j = 0; j < arr.length; j++) { System.out.print(arr[j] + " "); } } }
数组去重方法
面值试中常会被问到的问题--数组去重方法,此处整理了6中方法,后续添加。 1、arr.filter() var arr = [0,0,1,'a',1,2,'b','a','a']; var res = arr.filter(function(ele,index,array){ return index === array.indexOf(ele);
js中的数组排重-for循环竟然还有这样的操作
//需要排重数组 var arr=['1','2','3','3','5','4','5','9']; var hash=[];     for(var i=0;i        //将值作为键存在数组上!         hash[arr[i]]=1;     }     //定义一个新数组     var newArr=[];     console.log(hash
js清空数组的三种方法
方法1,splice方法splice() 方法用于插入、删除或替换数组的元素。 例如:var arr = [1, 2, 3, 4]; arr.splice(2,1,"Lemon","Kiwi"); //第一个参数为删除和添加数组的起始位置, //第二个参数为删除多少个元素, //第三个参数为添加新的元素 console.log(arr) //输出1,2,Lemon,Kiwi,4所以清空数组相当于删
javascript - Array.length的问题
另外: 1.var arr=new Array(1,2,3,)语法上是不正确的; 2.var arr=Array(1,2,3) 直接调用方法也可以返回一个想要的数组;
精妙绝伦数组的操作
数组与字符串的相互转化 JavaScript"> var obj="new1abcdefg".replace(/(.)(?=[^$])/g,"$1,").split(",");       //字符串转化为数组 var obj2 = "new2abcdefg".split("");                                            //字符
arr数组的方法
1.concat() 方法用于合并两个或多个数组let num1=[[5]]; let num2=[6,[7]]; let nums=num1.concat(num2); //alert(nums); num1[0].push(4); alert(nums);2.filter()方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素let arr=[12,3,6,7,99,35]; let...
ES6-变量的结构赋值-对象
2.对象的解构赋值 let { foo, bar } = { foo: "aaa", bar: "bbb" }; foo // "aaa" bar // "bbb" 1)对象的解构与数组有一个重要的不同,数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。 let { baz } = { foo: "aaa", bar: "bb
JS数组 全解析(创建数组的方法、稀疏数组、检测数组、数组元素的增删、常用的数组方法)
数组对象的作用是:使用单独的变量名来存储一系列的值。 在JS中,数组也是一种对象。 JS中的数组是弱类型的,一个数组中可以包含不同类型的元素,甚至是其他对象或数组。