解決しようとしています この符号語に関するこの課題 。課題によると、配列の部分:
ls = [0, 1, 3, 6, 10]
_
は
ls = [0, 1, 3, 6, 10]
ls = [1, 3, 6, 10]
ls = [3, 6, 10]
ls = [6, 10]
ls = [10]
ls = []
_
そして私達はそれらの部品の合計で配列を返す必要があります。
そのため、コードは次のとおりです。
function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.Push(sum);
ls.shift();
}
return arrayOfSums;
}
console.log(partsSums([0, 1, 3, 6, 10]));
_
問題は、配列が空のときに最後の合計0を追加することを望んでいることです。だから私たちは手に入っているべきです:
[20,20,19,16,10,0]
それ以外の
[20,20,19,16,10]
だから私はこれを試してみました:
function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.Push(sum);
ls.shift();
}
arrayOfSums.Push(0);
return arrayOfSums;
}
console.log(partsSums([0, 1, 3, 6, 10]));
_
この:
function partsSums(ls) {
ls.Push(0);
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.Push(sum);
ls.shift();
}
return arrayOfSums;
}
_
しかし、これらはコードワークの実行タイムアウトエラーを引き起こしました。
実行タイムアウト(12000ミリ秒)
だから私も試しました:
function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > -1) {
let sum = ls.reduce((a, b) => a + b);
arrayOfSums.Push(sum);
ls.shift();
}
return arrayOfSums;
}
_
しかし今これでTypeErrorが発生します。
TYPEERROR:初期値のない空の配列を減らす
すべての値がシフトアウトされたときに、アレイに0を取得する方法の概念を理解していません。配列が空の場合でも、アレイの最後の「合計」として課題が望んでいるようです。しかし、空の配列を減らすことはできません - ここで他に何ができますか?
[〜#〜]編集[〜#〜]:reduceメソッドに初期値を追加しました。
function partsSums(ls) {
let arrayOfSums = [];
while(ls.length > 0) {
let sum = ls.reduce((a, b) => a + b, 0);
arrayOfSums.Push(sum);
ls.shift();
}
return arrayOfSums;
}
_
残念ながら、これはまだ基本テストに失敗します。
期待される[]は深く等しい[0]
再帰でこれを試してください:
function partsSums(ls) {
let sum = ls.reduce((a, b) => a + b, 0);
return ls.length > 0 ? [sum].concat(partsSums(ls.slice(1))) : [0];
}
console.log(partsSums([0, 1, 3, 6, 10]));
console.log(partsSums([1, 2, 3, 4, 5, 6]));
console.log(partsSums([744125, 935, 407, 454, 430, 90, 144, 6710213, 889, 810, 2579358]));
_