需要帮助确定我在这场代码战挑战中做错了什么。
我意识到这对某些人来说可能很容易,但请注意我只是一个Javascript初学者。
挑战:
给你一个数组(长度至少为3,但是 可能非常大)包含整数。阵列完全是 由奇数整数组成或完全由偶数整数组成 除了一个整数N.编写一个将数组作为的方法 参数并返回N。
例如:
[2, 4, 0, 100, 4, 11, 2602, 36]
应该返回11
。
[160, 3, 1719, 19, 11, 13, -21]
应该返回160
。
我的代码:
function findOutlier(integers){
var even = [];
var odd = [];
for (var i = 0; i < integers; i++) {
if (integers[i] % 2 === 0) {
even.push(integers[i]);
} else {
odd.push(integers[i]);
}
if (even.length === 1) {
return even;
} else {
return odd;
}
}
}
答案 0 :(得分:1)
另一种可能的方式:
function myFunction(integers) {
var odds = integers.filter(function(num) {return num % 2});
var evens = integers.filter(function(num) {return !(num % 2)});
return evens.length == 1 ? evens[0] : odds[0];
}
您可以查看此 CodePen Demo 以在Mocha中测试该功能。
答案 1 :(得分:0)
我在您的代码块中发现了2个问题。您必须在数组长度上运行循环而不是整个数组,否则您可以使用foreach循环。完成循环后,您需要返回奇数/偶数值。请按照以下方式检查更新的代码,希望它能帮助您。
function findOutlier(integers){
var even = [];
var odd = [];
for (var i = 0; i < integers.length; i++) {
if (integers[i] % 2 === 0) {
even.push(integers[i]);
} else {
odd.push(integers[i]);
}
}
if (even.length === 1) {
console.log("OK..1");
return even;
} else {
console.log("OK..2");
return odd;
}
}
答案 2 :(得分:0)
尝试: for(var i = 0; i&lt; integers.length; i ++)
代替: for(var i = 0; i&lt; integers; i ++)
答案 3 :(得分:0)
如果您希望第一次出现而不迭代到最后一项而不使用命令式代码,则可以使用.find()
检查内部n
的最右边位是否为1; < / p>
var arr = [2, 4, 0, 100, 4, 11, 2602, 36],
resodd = arr.find(n => n & 1),
reseven = arr.find(n => !(n & 1));
console.log(resodd, reseven);
&#13;
答案 4 :(得分:0)
将奇数和偶数结果推入数组,然后比较剩下的内容
function findOutlier(integers) {
var arrO=[];
var arrE=[];
for(i=0; i<integers.length; i++){
if(integers[i] % 2==0 ){
arrE.push(integers[i])
}
else {
arrO.push(integers[i])
}
}
if(arrO.length > arrE.length){
return arrE[0]
}return arrO[0]
}