我有一个数组,需要将其转换为适合我的工作的新数组。这是我的原始数组:
注意:在我的代码中,'jayanagar'、'mallashwaram'、'kolar' 被称为城市。
var array1=[
["Year", "2018-8", "2017-8"],
["JAYANAGAR", "2018-8", 10910665],
["MALLESHWARAM", "2018-8", 2018451],
["KOLAR", "2018-8", 2277562],
["JAYANAGAR", "2017-8", 1134]
]
我将其转换为如下内容:
var array2=[
["Year", "Jul 2018", "Jul 2017"],
["JAYANAGAR", 10910665, 1134],
["MALLESHWARAM", 2018451],
["KOLAR", 2277562]
]
我的目标是:
如您在
arra1
中所见,我有两年的数据,即2018-8
和2017-8
,对于日期2018-8
,我有所有城市的数据,但是对于日期2017-08
,我只有一个城市的数据,即jayanagar
因此,我想要做的是,每当先前日期的城市数量较少时,我都想要将其显示为该城市的
0
例如,在
array2
中,我没有malleshwaram
和kolar
的数据,因此我想要在那里显示为 0用户选择的年份将给我所有城市名称,因此我想要循环遍历这里的其他日期数据,即
array2
日期最大的总是拥有所有城市名称
我的实现方法
var input = [
["Year", "2018-8", "2017-8"],
["JAYANAGAR", "2018-8", 10910665],
["MALLESHWARAM", "2018-8", 2018451],
["KOLAR", "2018-8", 2277562],
["JAYANAGAR", "2017-8", 1134]
]
var e = input[0]
var a = new Date(e[1]);
a.setMonth(a.getMonth());
a = a.toUTCString();
var c = a.split(' ');
e[1] = c[2] + " " + c[3];
a = new Date(e[2]);
a.setMonth(a.getMonth());
a = a.toUTCString();
c = a.split(' ');
e[2] = c[2] + " " + c[3];
const merged = input.reduce((acc, arr) => {
const [city, year, value] = arr;
if (city === "Year")
acc[city] = arr
else {
acc[city] = acc[city] || [city]
acc[city].push(value)
}
return acc;
}, {})
const output = Object.values(merged)
console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我期望的输出
[
[
"Year",
"Aug 2018",
"Aug 2017"
],
[
"JAYANAGAR",
10910665,
1134
],
[
"MALLESHWARAM",
2018451,
0
],
[
"KOLAR",
2277562,
0
]
]