【问题标题】:Given an array of integer numbers, sum this number and all numbers that after it给定一个整数数组,将这个数字和它后面的所有数字相加
【发布时间】:2022-01-04 16:23:54
【问题描述】:

最后我得到数字,如何将其转换为数组?

例子:

输入:4、5、1、2、3、-2

输出:[(13, 9, 4, 3, 1, -2)];

function sumNumbers(numbersList) {
  const data = numbersList.forEach((item, index) => {
    const output = numbersList.reduce(
      (acc, c, i) => (index !== i ? (acc += c) : c),
      0
    );
    console.log(result);

    return output;
  });
  return data;
}

sumNumbers([4, 5, 1, 2, 3, -2]);

【问题讨论】:

  • .forEach() 不返回任何内容,因此“忽略”return main

标签: javascript arrays numbers reduce


【解决方案1】:

考虑将Array.prototype.forEach 替换为Array.prototype.map(因为我们希望返回值)

function sumNumbers(numbersList) {
  const main = numbersList.map((item, index) => {
    const result = numbersList.reduce(
      (acc, c, i) => (index !== i ? (acc += c) : c),
      0
    );

    return result;
  });
  return main;
}

console.log(sumNumbers([4, 5, 1, 2, 3, -2]))

说明:

.forEach 返回未定义 (docs)

.map 返回“一个新数组,其中每个元素都是回调函数的结果。” (docs)

【讨论】:

  • @Andreas 感谢您的回答,这对我帮助很大!我很感激!
【解决方案2】:

@tibebes-m 给出的响应,另一种方法(降低复杂度)是向后迭代数组,并且仅使用 reduce 函数(无映射)

const sumNumbers = (list) => list
  .reverse()
  .reduce((acc, next, index) => {
      acc.unshift(next + (acc[0] || 0));
      return acc;
  }, []);

console.log(sumNumbers([4, 5, 1, 2, 3, -2]));

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 2016-04-06
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多