2016-12-26 10 views
1

forEachをarray.shift()+ array.pop()を使って配列の最初と最後の要素を続けて追加する関数を記述しようとしています。配列の最初と最後の数字を反復的に加算する

問題は、forループが最も内側の数字を完了しないため、配列の内部に2つの値が常に残ることです。

コード:

function choreAssignment(chores) { 
    chores.sort(function(a, b) {return a - b}); 
    var assignment = []; 
    chores.forEach(function() { 
    assignment.push((chores.pop() + chores.shift())); 
}); 
    return assignment.sort(function(a, b) {return a - b}); 
} 

上記のコードは期待通りに動作し、それはchoresアレイ内部最も内側の2つの値を残します。例えば

私は実行する場合:

コード:

var arr = [1, 4, 7, 2, 5, 9, 4, 3]; 
choreAssignment(arr); 

を私が手:

[8, 9, 10] 

すなわち、それは5 & 3、7 & 2、9 & 1を追加しますしかし、[4、4]は配列の中に残っています。

なぜこれがわかりません。ありがとうございました。 forEachを変更

+1

あなたの例や説明に常に存在していると仮定し

while (chores.length) { assignment.push((chores.pop() + chores.shift())); } 

注意が一致していないようです。私はサンプル入力 '[1,4,7,2,5,9,4,3] 'に対して出力を' [4,8,16,7] 'と期待しています。 – pzp

+0

まず、雑談アルゴリズムを最小値から最大値に並べ替えます。したがって、> shift()およびpop()を使う前に値は[1,2,3,4,4,5,7,9]としてリストされ、9 + 1,7 + 2,5 + 3 、何らかの理由で4 + 4ではありません。 –

答えて

3

試してみてください。これは、要素の偶数の配列

+0

ありがとう、これは働いた。なぜこの方法がうまくいったのか、それぞれについては詳しく説明できませんか?なぜ私は人が働くのか、他人は働かないのか分かりません。 –

+0

@ JonathanBechtel配列を反復処理している間は、配列から要素を削除するのは悪い考えです。 – pzp

+0

@pzpフィードバックいただきありがとうございます。私はreduceを使うことを考えていましたが、ドットを接続していなかったので、代わりにこのメソッドを使いました。これは生産には使用されませんが、タイヤを蹴るだけです。 –

関連する問題