第十四天
(题目来源: 前端每日知识3+1)
Javascript题目
题目: 写一个数组去重的方法(支持多维数组)并进行排序(js)
问题解答
- 使用es6语法中的set方法去重, 然后使用flat方法进行降维 最后使用sort方法进行排序
解题思路
es6语法
// 写一个数组去重的方法(支持多维数组)(js)function arrSet(arr) {return [...new Set(arr.flat(Infinity))].sort((a, b) => a - b) //flat方法}console.log(arrSet([1, [2, [23, 231], 31, 2],[2, 22, 3], 12, 1, 23]));
递归+冒泡排序
// 使用递归的方法写一个数组去重的方法(支持多维数组)(js)// 使用递归的方法进行降维let arr = [1, [2, [23, 231], 31, 2],[2, 22, 3], 12, 1, 23]let newarr = []function arrSet(arr) {if (Array.isArray(arr)) {arr.forEach(item => arrSet(item));} else {newarr.push(arr)}// return [...new Set(newarr)].sort((a, b) => a - b) // 使用sort方法进行排序return setSort([...new Set(newarr)])}function setSort(nosort) {let t = 0;for (let i = 0; i < nosort.length; i++) {for (let n = 0; n < nosort.length - 1; n++) {if (nosort[n] > nosort[n + 1]) {t = nosort[n]nosort[n] = nosort[n + 1]nosort[n + 1] = t}}}return nosort}console.log(arrSet(arr));
reduce方法
// 使用递归的方法写一个数组去重的方法(支持多维数组)(js)// 使用递归的方法进行降维let arr = [[1],[2, [23, 231], 31, 2],[2, 22, 3], 12, 1, 23]const arrSet = (arr) => [...new Set(arr.reduce((prev, cur) =>Array.isArray(cur) ? prev.concat(arrSet(cur)) : prev.concat(cur), //concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。[]))].sort((a, b) => a - b);console.log(arrSet(arr)); //[1, 2, 3, 12, 22, 23, 31, 231]
知识扩展
Array.isArray()用于确定传递的值是否是一个 Array.es5语法- 降维方法使用es6中的
flat()方法
- `flat()`用于将数组一维化, 返回一个新数组, 不影响原数组. 深拷贝- 默认一次只一维化一层数组, 若需多层, 则传入一个整数参数指定层数,比如flat(2)- 若要一维化所有层的数组, 则传入Infinity作为参数(可以传字符串也可以直接传值)
- 数组去重则使用的是es6中的set构造函数的方法, 也可以使用find和findindex方法进行去重
concat()方法用于合并两个或多个数组. 此方法不会更改现有数组, 而是返回一个新数组.sort()方法用原地算法对数组的元素进行排序, 并返回数组. 默认排序顺序是在将元素转换为字符串, 然后比较它们的UTF-16代码单元值序列时构建的MDN
if (a > b) {return 1} else if (a < b) {return -1} else {return 0}}
