乐趣区

codewars挑战系列一Find-the-Nexus-of-the-Codewars-Universe

写在开头

之前断断续续刷过一段时间的 codewars,虽然自己算法依旧菜鸡,不过却锻炼了对一些 API 的操作。因此想做一个系列,以后坚持在 codewars 上刷题。
(想锻炼算法还是力扣好一些,不过已经习惯这里了 ^__^

题目链接

/*
大概意思就是给你一个对象,对象的属性是“rank”,值是“honor”,写一个函数返回属性和值最接近的那个键值对的键名。*/
Example
         rank    honor
users = {  1  =>  93,
          10  =>  55,
          15  =>  30,
          20  =>  19,    <--- nexus
          23  =>  11,
          30  =>   2 }
function nexus(users){// 首先用 Object.keys() 方法返回所有可枚举属性,并将字符转为数字。let arr = Object.keys(users).map(Number);
// 然后按规则对数组进行排序
  arr.sort((a, b) => {
    // 先计算属性“rank”和值“honor”的差值
    let valueA = Math.abs(a - users[a]);
    let valueB = Math.abs(b - users[b]);
    // 如果差值相同,则按属性“rank”排序
    if (valueA === valueB) return a - b;
    // 否则按照差值排序
    return valueA - valueB;
  }); 
  // 返回数组第一项
  return arr[0];
}   

// 另有 reduce 函數写法
const nexus = users => 
+Object.keys(users).reduce((a,e) => Math.abs(e - users[e]) < Math.abs(a - users[a]) ? e : a);      
退出移动版