数组扁平化、去重和排序
1 扁平化--> 一维数组、多维数组
[1,2,3] 一维数组
[[1,2,3], [2,3]] 多维数组
注意点:数组和对象的各种使用和api方法 要非常的熟悉
function flatten(arr){
//判断传进来的值是不是数组
let _arr = arr || [],
fArr = [],
len = _arr.length,
item;
for(let i=0; i<len; i++){
item = _arr[i];
if(_isArray(item)){
fArr = fArr.concat(flatten(item))
}else{
fArr.push(item)
}
}
return fArr;
function _isArray(item){
return {}.toString.call(item) === '[object Array]'
}
}
通过构造函数来 设置array中添加方法
Array.prototype.flatten = function(){
let _arr = this,
toString = {}.toString;
if(toString.call(_arr) !== '[object Array]'){
// 抛出错误
throw new Error('只有数组才能调用flatten方法');
}
let fArr = [];
// 通过forEach
_arr.forEach(function(item){
toString.call(item) === '[object Array]' ? fArr = fArr.concat(item.flatten()) : fArr.push(item)
})
return fArr;
// 方法2 通过reduce
return _arr.reduce(function(prev, item){
return prev.concat(
toString.call(item) === '[object Array]'
? item.flatten()
: item)
}, [])
}
console.log([[1,2,4,[1,2,[1]]]].flatten())
[1, 2, 4, 1, 2, 1]
// es6的写法
let flatten = (arr) => {
return arr.reduce((prev, item) => {
return prev.concat(
{}.toString.call(item) === '[object Array]'
? flatten(item)
: item
)
}, [])
}
console.log(flatten([[1,2,4,[1,2,[1,[9,[80,[0]]]]]]]))
方法4
Array.from(new Set([[1,2,4,[1,2,[1,[9,[80,[0]]]]]]].flat(Infinity)))
2 数组元素去重
3 数组元素升序