【问题标题】:array of prefix sums of the given array. JavaScript, [duplicate]给定数组的前缀和数组。 JavaScript,[重复]
【发布时间】:2021-01-09 21:52:24
【问题描述】:

我检查了几个解决方案,但找不到适合我的解决方案。 我在创建具有前缀总和的新数组时遇到问题,例如: arr = [1,2,3,4,5] 应该给 newarr = [1,3,6,10,15] 我的代码有效,但仅适用于一位数(例如 3 将给出 6)。 我想使用 .map 或 forEach。

in131 = document.getElementById('in131num');
ans131 = document.getElementById('answer131');
document.querySelector('#btn131').addEventListener('click', () => {
   const arr131 = in131.value;
   arr131.split(' ');
   const new131 = [];

   for (let i = 1; i <= arr131; i++) {
       new131.push(i);
   }
   console.log(
       new131.reduce((a, b) => {
           return a + b;
       })
   );
   ans131.textContent = new131.reduce((a, b) => {
       return a + b;
   });

   console.log(
       new131.forEach((x) =>
           x.reduce((a, b) => {
               return a + b;
           })
       )
   );
});

如何在 .map 上使用 .reduce? 还有什么其他的解决方案?

【问题讨论】:

    标签: javascript arrays prefix


    【解决方案1】:

    因为您在字符串上使用split,所以您有一个字符串数组,而不是数字

    new131.reduce((p,c) => p + parseInt(c, 10), 0)
    

    【讨论】:

      【解决方案2】:

      地图

      创建新结果数组的基本解决方案地图,地图内部使用循环来构建总和。

          let arr = [1, 2, 3, 4, 5]
      
          const result = arr.map((val, index) => {
          let sum = 0;
          
          for(let i = 0; i < index+1 ; i++){
          sum += arr[i];
          }
          return sum;
          });
      
          console.log(result);

      循环 + 减少

      let arr = [1, 2, 3, 4, 5];
      let resultArr = [];
      for(let i = 1; i < arr.length+1; i++){
      let tempArr = arr.slice(0, i, arr);
      const result = tempArr.reduce((acc, val) => {
           acc += val;
           return acc;
           }, 0)
           resultArr.push(result);
          }
      
      
       console.log(resultArr);

      评论摘录

      let ans131 = document.getElementById("answer131")
      
      document.querySelector("#btn131").addEventListener("click", () => {
        let splitted = document.getElementById("in131num").value.split(",");
        let valasnumber = splitted.map((val) => {
          return Number(val);
        })
        console.log(valasnumber);
        const prefix = valasnumber.map((val, index) => {
          let sum = 0;
          for (let i = 0; i < index + 1; i++) {
            sum += valasnumber[i];
          }
          return sum;
        })
        console.log(prefix)
      
      })
      <input type="text" id="in131num"></input>
      <button id="btn131"></button>

      【讨论】:

      • 谢谢,我喜欢第一个选项,当然一切正常。但是我在从一个输入中存储多个数字时遇到了问题。您的版本基于已定义的数组: let arr = [1, 2, 3, 4, 5];当用户输入多个数字时,问题就开始了。我试图将 input.value 推送到新的 arr 并且结果是错误的(它只推送第一个数字)。 console.log 显示一个没有数组的数字。地图不会启动,因为 arr 没有定义。你知道如何解决这个问题吗?
      • 检查 input.value 是否真的是一个带有 typeof 的数字,你能分享你的示例代码吗?没有代码很难说
      • 谢谢。如果输入是单个数字,则返回数字,但如果我将添加两个或更多数字,则返回 NaN。我的代码:``` in131 = document.getElementById("in131num") ans131 = document.getElementById("answer131") document.querySelector("#btn131").addEventListener("click", () =>{ const arr131 = []; arr131.push(Number(in131.value)) console.log(arr131) const prefix =arr131.map((val, index) => { let sum=0; for (let i=1; i
      • 不,不是吗?输入 1, 2, 3, 4, 5 和第一个 sn-p @konrad 一样
      • 不客气 :) 如果您认为这对您有帮助,请将其标记为已接受,请点击上方/下方投票
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2017-06-28
      • 2017-05-05
      相关资源
      最近更新 更多