给定数组的前缀和数组。 JavaScript,[重复]

Posted

技术标签:

【中文标题】给定数组的前缀和数组。 JavaScript,[重复]【英文标题】:array of prefix sums of the given array. JavaScript, [duplicate] 【发布时间】: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? 还有什么其他的解决方案?

【问题讨论】:

【参考方案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 一样 不客气 :) 如果您认为这对您有帮助,请将其标记为已接受,请点击上方/下方投票

以上是关于给定数组的前缀和数组。 JavaScript,[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Java中的给定字符串值从数组列表中查找最长前缀?

525. 连续数组(前缀和+哈希)

525. 连续数组(前缀和+哈希)

LeetCode 0525. 连续数组:哈希表 + 前缀和

和为K的子数组

和为K的子数组