codewars挑戰系列(一):Find the Nexus of the Codewars Universe

寫在開頭

以前斷斷續續刷過一段時間的codewars,雖然本身算法依舊菜雞,不過卻鍛鍊了對一些API的操做。 所以想作一個系列,之後堅持在codewars上刷題。
(想鍛鍊算法仍是力扣好一些,不過已經習慣這裏了^__^javascript

題目連接java

/*
大概意思就是給你一個對象,對象的屬性是「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);
相關文章
相關標籤/搜索