You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 1. 递归functionflatten(arr){letresult=[]for(leti=0;i<arr.length;i++){if(Array.isArray(arr[i])){
result =result.concat(flatten(arr[i]))}else{result.push(arr[i])}}returnresult}
functionuniq(arry){varresult=[];for(vari=0;i<arry.length;i++){if(result.indexOf(arry[i])===-1){//如 result 中没有 arry[i],则添加到数组中result.push(arry[i])}}returnresult;}
使用 includes:
functionuniq(arry){varresult=[];for(vari=0;i<arry.length;i++){if(!result.includes(arry[i])){//如 result 中没有 arry[i],则添加到数组中result.push(arry[i])}}returnresult;}
数组扁平化
数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。也就是多维数组的降维方式。
递归
循环数组元素,如果还是一个数组,就递归调用该方法:
reduce
既然是对数组进行处理,最终返回一个值,我们就可以考虑使用 reduce 来简化代码:
借助 apply/call
扩展运算符
ES6 增加了扩展运算符,用于取出参数对象的所有可遍历属性,拷贝到当前对象之中:
ES6的flat
ES6 为数组实例新增了 flat 方法,用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数组没有影响。
flat 默认只会 “拉平” 一层,如果想要 “拉平” 多层的嵌套数组,需要给 flat 传递一个整数,表示想要拉平的层数。
使用 Infinity 作为深度,展开任意深度的嵌套数组。
数组去重
两次循环遍历
时间复杂度是O(n^2),如果数组长度很大,那么将会非常耗费内存
直接使用for:
使用 indexOf:
使用 includes:
使用 reduce:
用reduce可以写的比较简洁
排序后去重
排序后比较相邻元素,不算排序,只需要遍历一次数组
ES6的Set、Map
空间换时间的做法
使用 Set:
使用 Map:
参考资料
The text was updated successfully, but these errors were encountered: