js找出数组中第k大和第m大的数字相加之和

475 阅读1分钟

面试碰到的一道题目做下分享,如有错误,请指正

// 找出数组中第k大和第m大的数字相加之和
// 如 k = 2;m = 4; 找出第2和第4大之和 2 + 4 + 4 输出结果为 10
const arr = [1, 2, 4, 4, 3, 5];
const k = 2;
const m = 4;
const fn = (arr, k, m) => {
  let newArr = [];
  // 数组去重
  newArr = Array.from(new Set(arr));
  // 排序用于找出k和n对应的数字
  newArr = newArr.sort((a, b) => a - b);
  // 存储第k大的数字
  let KNum = newArr[newArr.length - k];
  // 存储第n大的数字
  let mNum = newArr[newArr.length - m];
  // 找出第k大和第n大的数,记录起来
  let nums = arr.filter((item) => KNum === item || mNum === item);
  let sum = [];
  // 求和
  sum = nums.reduce((cur, pre) => {
    return cur + pre;
  }, 0)
  return sum;
}
console.log(fn(arr, k, m))