一道题目:Descending Order。要求给出一个数字,把它自身的数位上的数从大到小排序一遍。涉及数字,字符串,数组的转换。
function descendingOrder(n){
return parseInt(String(n).split('').sort().reverse().join(''))
}
因为转换后数组中元素的类型是字符串,但是单个数字,却也可以直接用sort().而没必要用map遍历再转化为数字.试看如下解法
function descendingOrder(n){
return +(n + '').split('').sort(function(a,b){ return b - a }).join('');
}
刺激吧,实际上是用了unary plus operator,n+''
是转化为字符串,最后又将字符串用+
转换为数字。
Find the odd int
给定一个数字数组,找出其中只出现过奇数次的数字。符合要求的数字只有一个。
刚开始的思路是用includes()方法建立一个去重后的数组a。再创建数组b,包含数组a中各个数字在原数组中出现的次数。然后找出b的奇数元素就行。因为a,b长度相同,就可以得到要求的数字。
后来发现返回的数字只有一个。所以代码如下:
function findOdd(arr){
let uniqueArr = [],
odd = 0
for(let i = 0;i<arr.length; i++){
if(!uniqueArr.includes(arr[i]))
uniqueArr.push(arr[i])
}
for(let i=0; i<uniqueArr.length;i++){
let count = 0
for(let j=0;j<arr.length;j++){
if(arr[j] === uniqueArr[i])
count++;
}
if(count%2){
odd = i;
break;
}
}
return uniqueArr[odd]
}
codewar的最佳答案是:
const findOdd = (xs) => xs.reduce((a, b) => a ^ b);
运用XOR异或运算符的小婊子。。
网友评论