题目:将数组进行降序,数组中不会出现重复数字,连续数字间,只取最大值和最小值。例如:[4, 7, 2, 1, 5, 8, 9, 11]输出为[11, 9, 7, 5, 4, 2, 1]。
思路:先将数组降序,然后对不符合条件的数字给过滤掉,比如这一项如果即等于前一项减1,又等于后一项加1,说明的过滤掉。
法一:
function fn(arr) {
arr.sort((a, b) => b - a)
let res = []
for (let i = 0; i < arr.length; i++) {
if(arr[i] !== arr[i + 1] + 1 || arr[i-1] !== arr[i] + 1) {
res.push(arr[i])
}
}
return res
}
let a = [4, 7, 2, 1, 5, 8, 9, 11]
console.log(fn(a)) // 输出[11, 9, 7, 5, 4, 2, 1]
法二:
let arr = [4, 7, 2, 1, 5, 8, 9, 11]
arr = arr.sort((a, b) => b-a).filter((item, i) => item !== arr[i+1] + 1 || arr[i-1] !== item +1)
console.log(arr) // 输出[11, 9, 7, 5, 4, 2, 1]