第十四天
(题目来源: 前端每日知识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
}
}