Javascript 将现有阵列转换为新阵列

Javascript 将现有阵列转换为新阵列,javascript,json,Javascript,Json,我有一个数组,我正在将其转换为适合我工作的新数组。这是我的原稿: 注意:“jayanagar”、“mallashwaram”、“kolar”在我的代码中被称为城市 var array1=[ ["Year", "2018-8", "2017-8"], ["JAYANAGAR", "2018-8", 10910665], ["MALLESHWARAM", "2018-8", 2018451], ["KOLAR", "2018-8", 2277562], ["JAYANAGAR

我有一个数组,我正在将其转换为适合我工作的新数组。这是我的原稿:

注意:“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输入=[
[“年”、“2018-8年”、“2017-8年”],
[“JAYANAGAR”,“2018-8”,10910665],
[“MALLESHWARAM”,“2018-8”,2018451],
[“科拉尔”,“2018-8”,2277562],
[“JAYANAGAR”,“2017-8”,1134]
]
变量e=输入[0]
var a=新日期(e[1]);
a、 setMonth(a.getMonth());
a=a.toutString();
var c=分割(“”);
e[1]=c[2]+“”+c[3];
a=新日期(e[2]);
a、 setMonth(a.getMonth());
a=a.toutString();
c=a.分割(“”);
e[2]=c[2]+“”+c[3];
const merged=input.reduce((acc,arr)=>{
const[城市、年份、价值]=arr;
如果(城市==“年”)
acc[城市]=arr
否则{
acc[城市]=acc[城市]
acc[城市].推送(值)
}
返回acc;
}, {})
常量输出=对象值(合并)
console.log(输出)

此解决方案创建一个对象,用同一个键存储所有数据,其中键是城市,然后创建另一个数组,在输出中格式化数组

var输入=[
[“年”、“2018-8年”、“2017-8年”],
[“JAYANAGAR”,“2018-8”,10910665],
[“MALLESHWARAM”,“2018-8”,2018451],
[“科拉尔”,“2018-8”,2277562],
[“JAYANAGAR”,“2017-8”,1134]
];
var cities={};
var年数=输入[0];
函数formatDate(日期,索引){
如果(index==0){//跳过格式设置,因为它不是日期
返回日期;
}
日期={
“1”:“Jan”,
‘2’:‘2月’,
‘3’:‘3’,
"4":"Apr",,
"五":"五月",,
‘6’:‘6’,
‘7’:‘7月’,
"8":"8",,
‘9’:‘9’,
‘10’:‘10月’,
‘11’:‘11’,
‘12’:‘12’
};
设dateArr=date.split('-');
返回日期[dateArr[1]+''+dateArr[0];
}
年=年。地图(格式日期)//运行日期数组。
//将数据存储在对象项中,其中每个键都是城市,项是数据数组
input.forEach(函数(元素、索引){
如果(索引!==0){
if(城市[元素[0]]==未定义){
城市[元素[0]]=[];
}
城市[element[0]]。推送(element[2]);//添加到城市项目新数据
}
});
var citiesData=[];
对于(var city in cities){//以[city,…data]格式重新格式化数据
if(城市拥有自己的财产(城市)){
//citiesData.push
城市[city]。取消移动(城市);//将城市作为数组中的第一项添加
如果(years.length>cities[city].length){//假设每年都有可用的数据,请检查长度并用零填充
让fillsLength=years.length-城市[city].length;
让fills=Array(fillsLength).fill(0,0,fillsLength);//每年用0填充x次缺失数据
cities[city]=cities[city].concat(fills);//包含城市数据的0的concat数组
}
citiesData.push(城市[城市]);
}
}
citiesData.unshift(年);

console.log(citiesData)
我认为7月是一年中的第7个月……难道不是2018年8月吗?代码中没有JSON。JSON是一种看起来像JS文本的文本格式。您拥有的是一个数组。@JackBashford由于浏览器依赖性,它将其视为julyIt,但它不是JSON@很好,我已经编辑了我的帖子,但是我被卡住了,我怎么能检查年度城市和putas值0@dheerajkumar,第二级中每个数组中的第三项是什么?[城市、年份、值]这是我的array@dheerajkumar,我已用新代码编辑了我的答案。你需要在这个过程中使用object的帮助solution@dheerajkumar什么样的怀疑?运行代码段并检查结果。