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);      

你可能感兴趣的:(javascript)