array flatten

157 阅读1分钟

var arr = [1, [2, [3, 4,5]]];

console.log(flatten(arr)); // [1, 2, 3, 4,5]

方法一:递归实现

var arr = [1, [2, [3, 4, 5]]];function flatten(arr) { let result = []; for(let i = 0; i < arr.length; i++) { if(Array.isArray(arr[i])) { result = result.concat(flatten(arr[i])); } else { result.push(arr[i]); } } return result;}flatten(arr); //  [1, 2, 3, 4,5]

2.reduce

var arr = [1, [2, [3, 4, 5]]];function flatten(arr) { return arr.reduce(function(prev, next){ return prev.concat(Array.isArray(next) ? flatten(next) : next) }, [])}console.log(flatten(arr));// [1, 2, 3, 4,5]

3.扩展运算符

var arr = [1, [2, [3, 4, 5]]];function flatten(arr) { while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); } return arr;}console.log(flatten(arr)); // [1, 2, 3, 4,5]

4.split + tostring

var arr = [1, [2, [3, 4, 5]]];function flatten(arr) { return arr.toString().split(',');}console.log(flatten(arr)); // [1, 2, 3, 4,5]

5.正则+json

var arr = [1, [2, [3, 4, 5]]];function flatten(arr) { let str = JSON.stringify(arr); str = str.replace(/([|])/g, ''); str = '[' + str + ']'; return JSON.parse(str); }console.log(flatten(arr)); // [1, 2, 3, 4,5]

6.es6 flat

var arr = [1, [2, [3, 4, 5]]];function flatten(arr) { return arr.flat(Infinity);}console.log(flatten(arr)); // [1, 2, 3, 4,5]