2017-08-13 19 views
1

このコードワードチャレンジで私が間違っていることを特定するのに助けが必要です。配列から奇数または偶数を返す

これは一部の人にとっては簡単かもしれないが、私は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エラー。あなたのforループでinteger.lengthをやっていません。 2.最初の反復で常に偶数配列または奇数配列のいずれかを返します。空の配列でも構いません。 3.数字だけでなく配列を返しています。 –

+0

また、javascriptでは純粋なforループを使用することはほとんどありません。同じことを.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);

関連する問題