实现代码:JavaScript
题目很简单,可能几分钟就做出来,但是用到的一些高阶方法确很受益,可能由于要反复调用callback函数,在复杂度上并没有什么优化,但是却可以让代码更加简洁易读,减少工作量!
题目如下:
给出2*n + 1 个的数字(数组),除其中一个数字之外其他每个数字均出现两次,找到这个数字。
eg: function findNum(arr){ ... }
方法一(较为普遍):
function findNum(arr) {
let array = 0;
for(let item of arr) {
for (let term of arr) {
if (term === item) {
array++;
}
}
if (array === 1)
return item;
array = 0;
}
}
方法二(异或):
function findNum(arr) {
let result = [];
for(let i = 0; i < arr.length; i ++){
result = result ^ arr[i];
}
return result;
}
方法三(数组对象的高阶函数filter()):
function findNum(arr) {
return arr.filter((elem) => {
return arr.indexOf(elem) === arr.lastIndexOf(elem);
});
}
这样一道简单的题目却使用JS 内置高阶函数却可以大大减少代码量,JS学习还需多总结多实践呐~~~