写在开头
之前断断续续刷过一段时间的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);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。