降序输出并且连续数字之间只输出最大值和最小值

题目:将数组进行降序,数组中不会出现重复数字,连续数字间,只取最大值和最小值。例如:[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]

你可能感兴趣的:(降序输出并且连续数字之间只输出最大值和最小值)