web-dev-qa-db-ja.com

アレイの部分の合計 - JavaScript.

解決しようとしています この符号語に関するこの課題 。課題によると、配列の部分:

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]

9
HappyHands31

再帰でこれを試してください:

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])); _
1
bubbles