看到一个有趣的题目:
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 一个多维数组,要求扁平化,去重且升序,你会怎么做?
我们先从第一步来吧, 实现扁平化:
方法一: 像这种多维数组, 需要循环判断, 因此用while, 不用if(if是一次判断) flatten = (arr) => {
while(arr.some(item => Array.isArray(item))){
arr = [].concat.apply([],arr);
}
return arr;
} flatten(arr)
// [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10] 方法二:
比较hack的方式, 只适用于纯数字
arr.toString().split(',').map(itm=> parseInt(itm))
// [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10]
最佳实践方法三:
lodash 的flatten,
当然, 如果是简单的二维, 那我们用es6扩展运算符或concat就可以搞定,比如:flattenDeep 方法。
var arr = [1, [2, 3]];
[].concat.apply([],arr); // [1, 2, 3]
或
[].concat(...arr) // [1, 2, 3]
第二部, 去重且升序:
这步相对于第一步来说应该很简单了,一维数组去重方式好多,
sortnum = (a, b) => {
return a - b
}
var arr1 = [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12, 13, 14, 10] new Set(arr1.sort(sortnum)) // 先排序再去重