首页 > 编程知识 正文

es6数组扁平化,es6深拷贝和浅拷贝

时间:2023-05-06 01:08:04 阅读:114493 作者:2022

一维数组三种初始化的方法比较

//*

*方法(不指定:长度,循环代入

* @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将填充为对象类型(数组)是浅副本。 换句话说,如果为任何二维数组赋值,则会为整个列赋值相同的值。 如下所示。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。