一维数组三种初始化的方法比较
//*
*方法(不指定:长度,循环代入
* @param {*} length数组长度
* @param {*} value数组项目初始值*/array.prototype.initial1=function (length,value ) for ) letI=0; I
}
(/**
*方法(指定:长度并为循环指定值)
* @param {*} length数组长度
* @param {*} value数组项目初始值*/array.prototype.initial2=function (length,value ) {this.length=length; for(letI=0; I
}
(/**
*方法2 :指定长度,填充es6
* @param {*} length数组长度
* @param {*} value数组项目初始值*/array.prototype.initial3=function (length,value ) {this.length=length; this.fill (值)
}
console.time(initial1: );
let arr1=[];
arr1. initial1(5,0 );
console.log('arr1',arr1);
控制台. time end (initial 1: );
console.time(initial2: );
let arr2=[];
arr2. initial2(5,0 );
console.log('arr2',arr2);
控制台. time end (initial 2: );
控制台. time (initial : );
let arr3=[];
arr3. initial3(5,0 );
console.log('arr3',arr3);
控制台. time end (initial : );
节点执行结果
浏览器运行结果
继续优化,合并一维数组和二维数组的初始化。 代码如下
//组初始化/**
*方法1 :不指定长度,循环赋值
* @ param { * }行计数
* @param {*} col列数,如果该值为false,则表示该初始化数组为一维数组
* @param {*} value初始值*/array.prototype.initial1=function (row,col,value ) if (col ) for ) letI=0; I
}
(else ) for ) letI=0; I
}
}
(/**
*方法2 :指定长度,循环赋值
* @ param { * }行计数
* @param {*} col列数,如果该值为false,则表示该初始化数组为一维数组
* @param {*} value初始值*/array.prototype.initial2=function (row,col,value ) {this.length=row; if(col ) for ) letI=0; I
}
}
(else ) for ) letI=0; I
}
}
(/**
*方法3 :指定长度,填充es6
* @ param { * }行计数
* @param {*} col列数,如果该值为false,则表示该初始化数组为一维数组
* @param {*} value初始值*/array.prototype.initial3=function (row,col,value ) {this.length=row; if(col ) for ) letI=0; I
}
}else{this.fill(value ) )。
}
}
常数计数=10000常数计数=10000 console.time (initial 1: );
let arr1=[];
ARR1.initial1(rowcount,colCount,0 ); //console.log('arr1',arr1);
控制台. time end (initial 1: );
console.time(initial2: );
let arr2=[];
ARR2.initial2(rowcount,colCount,0 ); //console.log('arr2',arr2);
控制台. time end (initial 2: );
控制台. time (initial : );
let arr3=[];
ARR3.initial3(rowcount,colCount,0 ); //console.log('arr3',arr3);
控制台. time end (initial : );
执行结果的比较
节点执行结果
初始化一维数组为100个数据时,即rowCount:100、colCount:0、value:0 )
初始化一维数组为100000个数据时,即rowCount:100000、colCount:0、value:0 )
初始化二维数组为100 x 100的数据时,即rowCount:100、colCount:100、value:0 )
初始化二维数组为10000 x 10000的数据时,即rowCount:10000、colCount:10000、value:0 )
浏览器运行结果
初始化一维数组为100个数据时,即rowCount:100、colCount:0、value:0 )
初始化一维数组为100000个数据时,即rowCount:100000、colCount:0、value:0 )
初始化二维数组为100 x 100的数据时,即rowCount:100、colCount:100、value:0 )
初始化二维数组为15000 x 15000的数据时,即rowCount:15000、colCount:15000、value:0 )
通过以上测试,可以得出在node和浏览器上运行还存在一些差异,运行效率为initial1initial2inital3。 无论是浏览器还是node,在初始化多数据二维数组时,fill都比直接赋值慢一些。 因此,初始化数组时必须指定数组的长度。 这样,执行效率就会更高
特别注意:在初始化二维数组时,fill将填充为对象类型(数组)是浅副本。 换句话说,如果为任何二维数组赋值,则会为整个列赋值相同的值。 如下所示。