【问题标题】:Join elements in 2D array with similar values [closed]加入具有相似值的二维数组中的元素[关闭]
【发布时间】:2021-02-21 17:09:07
【问题描述】:

所以我的数组如下:

array = [ [5, type1, quantity1, price1] , 
      [2, type2, quantity2, price2] ,
      [2, type1, quantity3, price1]
    ]

上述值不是恒定的,它们可以变化。重要的是它们匹配并且它们相加在一起创建 1 个元素。

因此,由于 array[0]array[2] 具有相同的类型和价格 (array[n][1] and array[n][3]),因此生成的数组应如下所示:

[ [7, type1, quantity1+quantity3, price1], 
  [2, type2, quantity2, price2]
]

数组的长度为 N。我正在尝试找到执行此操作的最佳算法,但找不到。

提前致谢。

【问题讨论】:

  • 你能附上样本输入吗?
  • @Derek.W 在我的问题开头

标签: javascript arrays sorting multidimensional-array


【解决方案1】:

您可以使用组合键并增加价值和数量。

const
    array = [[5, 'type1', 10, 'price1'], [2, 'type2', 11, 'price2'], [2, 'type1', 12, 'price1']],
    grouped = Object.values(array.reduce((r, [value, type, quantity, price]) => {
        const key = [type, price].join('|');
        if (r[key]) {
            r[key][0] += value;
            r[key][2] += quantity;
        } else r[key] = [value, type, quantity, price];
        return r;
    }, {}));

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 感谢您的回答。我还没有尝试过,但我不知道它是否会起作用。 “类型和价格”的值不是恒定的,它只是我放置的一个占位符。它可以是多种值。因此,您将 const 键与类型和价格放在一起,而它应该是该位置的任何值。希望这是有道理的。
  • 谢谢,我搞定了。您介意解释一下您所做的部分 .[type, price].join('|') 吗?
  • 这是获取typeprice的值的联合键,通过管道'|'连接。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 2013-07-21
  • 2016-07-08
  • 2023-02-25
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多