Appearance
前端面试题:数组扁平化、去重、排序
题目:
已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
答案:
javascript
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]
// 扁平化
let flatArr = arr.flat(4)
// 去重
let disArr = Array.from(new Set(flatArr))
// 排序
let result = disArr.sort(function (a, b) {
return a - b
})
console.log(result)
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
说明:
Array 属性说明: MDN Array
flat()
方法创建一个新的数组,并根据指定深度递归地将所有子数组元素拼接到新的数组中
flat()
flat(depth) //
depth
遍历深度
javascript
const arr1 = [1, 2, [3, 4]]
arr1.flat()
// [1, 2, 3, 4]
const arr2 = [1, 2, [3, 4, [5, 6]]]
arr2.flat()
// [1, 2, 3, 4, [5, 6]]
const arr3 = [1, 2, [3, 4, [5, 6]]]
arr3.flat(2)
// [1, 2, 3, 4, 5, 6]
Array.from()
静态方法从可迭代或类数组对象创建一个新的浅拷贝的数组实例
Array.from(arrayLike)
Array.from(arrayLike, mapFn)
Array.from(arrayLike, mapFn, thisArg)
TIP
可迭代: 例如 Array、Map、Set 对象
类数组对象: 带有 length 属性或索引属性的对象
javascript
// 使用箭头函数作为映射函数去操作多个元素
Array.from([1, 2, 3], x => x + x)
// [2, 4, 6]
// 生成一个数字序列。因为数组在每个位置都使用 `undefined` 初始化,下面的 `v` 值将是 `undefined`
Array.from({ length: 5 }, (v, i) => i)
// [0, 1, 2, 3, 4]
sort()
方法就地对数组的元素进行排序,并返回对相同数组的引用。默认排序是将元素转换为字符串,然后按照它们的 UTF-16 码元值升序排序
sort()
sort(compareFn)
compareFn(a, b) 返回值 | 排序顺序 |
---|---|
> 0 | a 在 b 后,如 [b, a] |
< 0 | a 在 b 前,如 [a, b] |
=== 0 | 保持 a 和 b 原来的顺序 |
javascript
const months = ['March', 'Jan', 'Feb', 'Dec']
months.sort() // ["Dec", "Feb", "Jan", "March"]
const numberArray = [40, 1, 5, 200]
function compareNumbers(a, b) {
return a - b
}
numberArray.sort() // [1, 200, 40, 5]
numberArray.sort(compareNumbers) // [1, 5, 40, 200]