Javascript 将现有阵列转换为新阵列
我有一个数组,我正在将其转换为适合我工作的新数组。这是我的原稿: 注意:“jayanagar”、“mallashwaram”、“kolar”在我的代码中被称为城市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
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
的数据,因此我想在那里显示为0kolar
- 用户选择的年份将给我所有城市的名称,因此根据这一点,我想在这里循环其他日期数据,其中一个是
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什么样的怀疑?运行代码段并检查结果。