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
/** * @param {array}arr The array to be flatten. * @param {number}depth The depth level specifying how deep a nested array structure should be flattened. Defaults to 1. */functionflat(arr,depth=1){varres=[]varunflattenDepth=depthvarisArray=Object.prototype.toString.call(arr)==='[object Array]'if(isArray){helper(arr)}else{// 将类数组对象处理为数组varslicedArr=Array.prototype.slice.call(arr)if(slicedArr.length>0){helper(slicedArr)}}returnresfunctionhelper(arr){unflattenDepth-=1if(unflattenDepth<0){res=res.concat(arr)}else{for(vari=0;i<arr.length;i++){varelement=arr[i]if(Object.prototype.toString.call(element)==='[object Array]'){helper(element)}else{res.push(element)}}}}}
Activity
Uwah commentedon Apr 29, 2020
利用while循环结合some实现数组扁平,然后利用ES6 Set去重
appbeijing commentedon Apr 29, 2020
appbeijing commentedon Apr 29, 2020
zhuzhuoxingguang commentedon Apr 29, 2020
thxiami commentedon Apr 29, 2020
题目是让自己实现数组去重和扁平化函数的, 用自带的 API 就失去意义了
thxiami commentedon Apr 29, 2020
1 数组去重函数
题目中没有给出数组中元素的类型, 这里假设元素类型为
number. 如果是其他类型, 对代码稍作修改即可.这里给出两种方案, 其时间复杂度和空间复杂度不同.
方案1: 借助哈希表数据结构记录出现过的元素
遍历数组, 使用
Object辅助记录出现过的元素通过
Object重建数组,也可以使用一个空数组在遍历时直接存储Object中未出现的元素.时间复杂度: O(n), n 为数组元素个数
空间复杂度: O(n)
注: 元素类型如果只有
string或number中的一种类型, 使用Object就能满足要求; 其他情况下 需要借助Map方案 2: 借助有序数组去重的思路
时间复杂度: O(n*logn)
空间复杂度: O(1)
2 扁平化函数
适用条件: 数组或类数组对象, 对于嵌套数组可通过
depth指定扁平化的深度.sisterAn commentedon Apr 29, 2020
数组扁平化(又称数组降维)
Array.prototype.flat()特性总结:Array.prototype.flat()用于将嵌套的数组扁平化,变成一维的数组。该方法返回一个新数组,对原数据没有影响。<=0的整数将返回原数组,不扁平化Infinity关键字作为参数时,无论多少层嵌套,都会转为一维数组Array.prototype.flat()会跳过空位。方法一:使用 reduce 方法
一次性扁平化所有:
实现
flat函数:方法二:栈
一次性降维所有
数组去重
方式一:Set(ES6)
方式二:reduce
方法三:filter
[-]携程&蘑菇街:手写数组去重、扁平化函数[/-][+]携程&蘑菇街&bilibili:手写数组去重、扁平化函数[/+]linhexs commentedon Jan 7, 2021
递归加Set
z253573760 commentedon Feb 2, 2021
qiujie8092916 commentedon Jul 23, 2021
XuRan-Luo commentedon Sep 24, 2021
let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN','NaN', 0, 0, 'a', 'a',{},{}];
let obj = {}
let newArr = []
for(let i = 0; i < arr.length; i++) {
if(!obj[arr[i]]){
obj[arr[i]] = 1
newArr.push(arr[i])
}
}
console.log(newArr) // [1, 'true', 15, false, undefined, null, NaN, 0, 'a', {…}]