【问题标题】:How to calculate the sum of the values of arrays in javascript如何在javascript中计算数组值的总和
【发布时间】:2021-05-21 16:58:55
【问题描述】:

我是编程新手,无法在 javascript (vue) 中进行数组处理。

这是交易:我有 26 个数组,每个数组有 4 个元素(值:a、b、c、d)。

我必须根据它们的索引对值求和,例如:

{c, d, b, a} = c = 4, d = 3, b = 2, a = 1;

最后我必须有一个包含所有这 26 个对象之和的数组,例如: [a = 104, b = 78, c = 52, d = 26]

我目前拥有的:

Array(26) [ (4) […], (4) […], (4) […], (4) […], (4) […], (4) […], (4) […], (4) […], (4) […], (4) […], … ]

this.array.forEach(item => {
    sum[item.value] = sum[item.value] + (i+1)
});

编辑:26 个对象的数组中的对象具有不同的值和描述顺序 {b, a, d, c}, {a,d,b,c}, {a,b,c,d}。 ..索引有“点”(求和的值),即:第一个索引= 4点,第二个索引= 3,第三个= 2,最后一个= 1我必须对每个单独的值求和并放在一个结果数组中。

所以我的预期结果数组是(例如):

[a = 104, b = 78, c = 52, d = 26]

Edit2:对不起,我一开始不明白你在问什么。 我的简化输入数组:

Array(3) [
[
    {value: "a", description: "..."},
    {value: "b", description: "..."},
    {value: "c", description: "..."},
    {value: "d", description: "..."}
], 
[
    {value: "a", description: "..."},
    {value: "b", description: "..."},
    {value: "c", description: "..."},
    {value: "d", description: "..."}
], 
[
    {value: "a", description: "..."},
    {value: "b", description: "..."},
    {value: "c", description: "..."},
    {value: "d", description: "..."}
]]

我认为这更像是一个逻辑问题,但我被困在这个问题上。

提前致谢!

【问题讨论】:

  • 您能否提供示例输入和预期输出?我不清楚你到底想做什么。
  • 嗨,你有数组数组还是对象数组?
  • 我看到了预期的输出,但样本输入在哪里?
  • @YashMaheshwari 没错
  • “没有输入,我必须处理 26 个对象的数组...” - “对象数组”正是我们都在询问的输入关于。这是您算法的输入。你已经用文字描述了它,但你没有给出一个完整的例子。

标签: javascript arrays frontend logic


【解决方案1】:

解释(可能不是很好)这是做什么的:

对于每个内部数组,它获取每个对象并将其转换为类似 ['a', 3] 的数组,其中 'a' 是对象的值,3 是 4 减去它的索引(因此分数应该是4, 3, 2, 1 表示内部阵列中的四个位置)。然后将内部数组展平,以便这些新数组在数组中都处于同一级别。这些新数组是通过reduce处理的,以将我们存储在数组中的值相加。

const data = [
  [{ value: 'a' }, { value: 'b' }, { value: 'c' }, { value: 'd' }],
  [{ value: 'b' }, { value: 'c' }, { value: 'd' }, { value: 'a' }]
];

const res = data
  .flatMap( (scores) => scores.map(({ value }, i) => [value, 4 - i]) )
  .reduce(
    (acc, [key, score]) => Object.assign(acc, { [key]: acc[key] + score }),
    { a: 0, b: 0, c: 0, d: 0 }
  );

console.log(res);

【讨论】:

  • 对不起,我一开始没有提出正确的问题,我已经在帖子上进行了编辑2,但是您的回复非常接近我的需要
  • 救命!非常感谢你
  • @gelene5745 如果此答案解决了您的问题,请将其标记为已接受答案(左侧箭头下方的复选标记)
猜你喜欢
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
相关资源
最近更新 更多