写在开头
之前断断续续刷过一段时间的 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);