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