js数组扁平化
1.偶然发现了yield*的用法,天才级别的扁平化方式
function* iterTree(tree){ if(Array.isArray(tree)){ for(let i = 0 ;i<tree.length;i++){ yield* iterTree(tree[i]); } }else{ yield tree; } }
let arr1 = [1, 2, ['a', 'b', ['中', '文', [1, 2, 3, [11, 21, 31]]]], 3];
for (const x of iterTree(tree)) { console.log(x); }
2.利用Array.some方法判断数组中是否还存在数组,es6展开运算符连接数组
function iterTree2(arr) { while (arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); } return arr; } console.log(iterTree2(arr1));
3.利用array数组的reduce属性,reduce回调函数有四个参数,reduce(( previousValue,currentValue,currentIndex,array)=>{},initial)
提供了initial的值的时候,previousValue为initial的大小,currentValue为数组的第一个元素值
没有提供initial的值的时候,preciousValue为数组第一个元素的值,currentValue为第二个元素的值,此后每执行一次,previousValue
function iterTree3(arr) { var newArr = arr.reduce((prev, current) => { return prev.concat(Array.isArray(current) ? iterTree3(current) : current) }, []); return newArr; } console.log(iterTree3(arr1));
4.es6中的flat函数也可以实现数组的扁平化
let arr1 = [1,2,['a','b',['中','文',[1,2,3,[11,21,31]]]],3];
console.log( arr1.flat( Infinity ) );
目前就这么多吧。。============================================================想到的时候再来