【发布时间】:2020-06-17 01:56:43
【问题描述】:
我有这个数据数组,需要一个重新映射的版本来遍历日期。
var objArr = [
{"Country": "US", "2017-07-12": "1", "2017-07-13": "2"},
{"Country": "US", "2017-07-12": "2", "2017-07-13": "2"},
{"Country": "CN", "2017-07-12": "5", "2017-07-13": "7"},
{"Country": "CN", "2017-07-12": "5", "2017-07-13": "7"}
]
- 国家/地区应将它们的值相加,并且不应在内部数组中出现两次。
- 最后我想要一个这样的数组:
var remapped = [
{"2017-07-12": [
{"Country: "US", "value": 3},
{"Country: "CN", "value": 10}],
{"2017-07-13": [
{"Country: "US", "value": 4},
{"Country: "US", "value": 14}]
]
在我目前的情况下,我明白了,但国家应该减少并且价值相加:
var remapped = [
{"2017-07-12": [
{"Country: "US", "value": 1},
{"Country: "US", "value": 2},
{"Country: "CN", "value": 5}],
{"Country: "CN", "value": 5}
],
{"2017-07-13": [
{"Country: "US", "value": 2},
{"Country: "US", "value": 2},
{"Country: "US", "value": 7}
{"Country: "US", "value": 7}
]
]
这就是我迄今为止所做的。但对我来说,这似乎过于复杂,我相信有一种更有效的方法可以解决这个问题: 在这种状态下,我将国家重新映射到日期,但不知道如何“减少”它们。我真的需要对数组进行多次迭代吗?
const res = [];
dateArray.forEach(date => (objArr[date] = [])); // I create an array with dates which could contain another array
objArr.forEach(item => {
dates.forEach(date => {
res[date].push({
Country: item['Country'],
value: item[date],
});
});
});
【问题讨论】:
标签: javascript arrays sorting reduce remap