【发布时间】:2018-06-13 20:16:30
【问题描述】:
我有一个矩阵算法:
输入:
const input = [
['Camry', 'Toyota', 'Jan', 'Nowhere Town', '50'],
['Camry', 'Toyota', 'Feb', 'Nowhere Town', '70'],
['Camry', 'Toyota', 'Jan', 'Random City', '3000'],
['Prius', 'Toyota', 'Jan', 'Nowhere Town', '60'],
['Prius', 'Toyota', 'Jan', 'Random Town', '60'],
['Prius', 'Toyota', 'Mar', 'Nowhere Town', '50'],
['Civic', 'Honda', 'Jan', 'Nowhere Town', '10'],
['Civic', 'Honda', 'Feb', 'Nowhere Town', '10'],
['Civic', 'Honda', 'Mar', 'Random Town', '10'],
['Civic', 'Honda', 'Mar', 'Random Town', '20'],
]
预期输出:
const output = [
['S', 'Camry', 'Toyota', 'Jan', '3050'],
['D', 1, 'Camry', 'Nowhere Town', '50'],
['D', 2, 'Camry', 'Random City', '3000'],
['S', 'Camry', 'Toyota', 'Feb', '70'],
['D', 1, 'Camry', 'Nowhere Town', '70'],
['S', 'Prius', 'Toyota', 'Jan', '120'],
['D', 1, 'Prius', 'Nowhere Town', '60'],
['D', 2, 'Prius', 'Random Town', '60'],
['S', 'Prius', 'Toyota', 'Mar', '50'],
['D', 1, 'Prius', 'Nowhere Town', '50'],
['S', 'Civic', 'Honda', 'Jan', '10'],
['D', 1, 'Civic', 'Nowhere Town', '10'],
['S', 'Civic', 'Honda', 'Feb', '10'],
['D', 1, 'Civic', 'Nowhere Town', '10'],
['S', 'Civic', 'Honda', 'Mar', '20'],
['D', 1, 'Civic', 'Random Town', '10'],
['D', 2, 'Civic', 'Random Town', '10'],
]
言下之意: 如果行包含相同的 Brand、相同的 Make 和相同的 Month,则在顶部添加一个包含总销售额的摘要行,并为每个列添加列出的订单详细信息行。
我有一个旧代码:
const groupReport = arr => {
let grouped = [].concat(...arr.reduce((acc, cur) => {
var data = acc.get(cur[1]) || [['P', cur[1], '0']]
data.push(['D', data.length, cur[0], cur[3], cur[4]])
data[0][2] = (+data[0][2] + +cur[4]).toString()
return acc.set(cur[0], data);
}, new Map)
.values()
)
return grouped
}
它不起作用,因为它只比较一个列(品牌),而不是制造和月份。
【问题讨论】:
-
我强烈建议将其更改为对象数组(具有类似
{"Model": "Camry", "Make": "Toyota", "Month": "Jan", "Price?": 3050 }的结构在他们身上。然后你可以使用stackoverflow.com/questions/37481539/… 中概述的技术来做你正在寻找的东西。 -
@MikeMcCaughan 我是第二个!
-
感谢您的建议,该问题的答案确实会添加每行的总和,但不会将行添加到顶部。你也知道怎么做吗?
标签: javascript arrays matrix