将多维数组降维变成一维数组
//将多维数组降维变成一维数组
var arr = ['aa', 'bb', 2, 3, [4, 5, 6, [7, 8, 9, 10, [1, 2, 3, [4, 5, 6]]]], null, {}, [7, [8, [9, [10]]]], null, {}, [], [[1, 2]]];
var res = ['aa', 'bb', 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, null, {}, 7, 8, 9, 10, null, {}, 1, 2];
function isArray(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
}
function flatten(arr) {
var arr = arr || [],
len = arr.length,
resArr = [];
for (var i = 0; i < len; i++) {
if (isArray(arr[i])) {
resArr = resArr.concat(flatten(arr[i]));
} else {
resArr.push(arr[i]);
}
}
return resArr;
}
console.log(flatten(arr).toString == res.toString);
// 优雅的方法1
Array.prototype.flatten = function () {
var resArr = [];
this.forEach(function(item){
Object.prototype.toString.call(item) == '[object Array]' ? resArr = resArr.concat(item.flatten()) : resArr.push(item);
})
return resArr;
}
console.log(arr.flatten().toString == res.toString);
// 优雅的方法2
function flatten1 (arr){
var arr = arr || [];
return arr.reduce(function(prev,next){
return Object.prototype.toString.call(next) == '[object Array]'? prev.concat(flatten1(next)) : prev.concat(next);
},[])
}
console.log(flatten1(arr).toString == res.toString);
// 优雅的方法3
const flatten2 = arr=>arr.reduce((prev,next)=>Object.prototype.toString.call(next) == '[object Array]'? prev.concat(flatten1(next)) : prev.concat(next));
console.log(flatten1(arr).toString == res.toString);