在es6中因为...的出现,使得数组或者对象的处理十分简便
//Array
let a = [1,2,3],
b = [4,5,6],
c = [...a,...b] //[1,2,3,4,5,6]
//Object
let a = {name : '小明'},
b = {height : 176},
c = {...a,...b} //{name: '小明', height: 176 }
所以经常有使用...结合循环(for, map, forEach, reduce···)来进行一些操作
例如调整数据,去重,对象属性合并等等
//调整数组[[1,2,3],[4,5,6],[7,8,9]] > [1,2,3,4,5,6,7,8,9]
let arr1 = [[1,2,3],[4,5,6],[7,8,9]]
let arr2 = arr1.reduce((r,c) => [...r,...c],[]) //[1,2,3,4,5,6,7,8,9]
//数组[1,1,1,2,2,2,3,3,3]对象法去重
let arr1 = [1,1,1,2,2,2,3,3,3]
let arr2 = Object.values(arr1.reduce((r,c) => r = {...r,[c]: c},{})) //[1,2,3]
但近日笔者在使用nodejs处理大量的数据时,约25万
个item的arr,arr如调整数组中的例子
nodejs执行后直接一直处于计算状态,笔者等了10min都还没计算结束
但将循环中的...过程修改为.push(),则基本一两秒钟就可以计算完毕
经过分析得知,由于大量的数据
处理,在每一次循环中,...都会将数据拆解,并且使用[]合并。在大量的数据运算下,性能极其不好
所以笔者推荐
在
少量
的数据的情况下,可以使用...在循环中直接拆解合并,来使代码结构更加简单美观在
大量
的数据中,推荐使用传统的push等操作,来增加性能
上面例子,增加性能的方式修改:
//调整数组[[1,2,3],[4,5,6],[7,8,9]] > [1,2,3,4,5,6,7,8,9]
let arr1 = [[1,2,3],[4,5,6],[7,8,9]]
let arr2 = arr1.reduce((r,c) => {
r.push(...c)
return r
},[]) //[1,2,3,4,5,6,7,8,9]
//数组[1,1,1,2,2,2,3,3,3]对象法去重
let arr1 = [1,1,1,2,2,2,3,3,3]
let arr2 = Object.values(arr1.reduce((r,c) => {
r[c] = c
return r
},{})) //[1,2,3]
版权属于:谁把年华错落成诗 所有,转载请注明出处!
本文链接:https://blog.pomears.com/archives/37.html
如果博客部分链接出现404,请留言或者联系博主修复。