2017-08-13 85 views
1

只需要帮助确定我在这个codewar挑战中做了什么错误。从数组中返回一个奇数或偶数

我意识到这可能对一些人很容易但请注意我只是一个初学者与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

3个错误在你的代码。 1.你的循环中没有使用整数.length。 2.在第一次迭代中,您总是返回偶数组或奇数组,这可能是一个空数组。 3.你正在返回一个数组,而不是数字,所以请做偶数[0]和奇数[0] –

+0

也只是一个提示,在JavaScript中你很少使用纯循环,因为你可以用.filter完成同样的事情, .reduce,.map或.forEach – Bergur

回答

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; 
    } 
} 
0

尝试: 为(VAR I = 0;我< integers.length;我++)

代替: 为(VAR I = 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来测试摩卡的功能。

0

如果您想在没有迭代到最后一个项目但没有使用命令代码的情况下获得第一个匹配项,则可以使用.find()检查内部,如果n的最右边位为1;

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);