如何在javascript中基于多个键对数组进行分组和转换?
大家好,我是javascript新手,我想在我的项目中将数组的格式更改为新格式如何在javascript中基于多个键对数组进行分组和转换?,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,大家好,我是javascript新手,我想在我的项目中将数组的格式更改为新格式 var array=[ { Indicator: "Population National (% of population)", Country: "India", Year: "2012", Value: "98.8" }, { Indicator: "Population National (% of population)", Country: "India", Year: "2013
var array=[
{ Indicator: "Population National (% of population)", Country: "India", Year: "2012", Value: "98.8" },
{ Indicator: "Population National (% of population)", Country: "India", Year: "2013", Value: "99.1" },
{ Indicator: "Population National (% of population)", Country: "Japan", Year: "2012", Value: "99.2" },
{ Indicator: "Population National (% of population)", Country: "Japan", Year: "2013", Value: "99.3" },
{ Indicator: "Population National (% of population)", Country: "China", Year: "2012", Value: "99.4" },
{ Indicator: "Population National (% of population)", Country: "China", Year: "2013", Value: "99.8" },
{ Indicator: "Population Rural (% of population)", Country: "India", Year: "2012", Value: "97.9" },
{ Indicator: "Population Rural (% of population)", Country: "India", Year: "2013", Value: "98.2" },
{ Indicator: "Population Rural (% of population)", Country: "Japan", Year: "2012", Value: "98.4" },
{ Indicator: "Population Rural (% of population)", Country: "Japan", Year: "2013", Value: "98.7" },
{ Indicator: "Population Rural (% of population)", Country: "China", Year: "2012", Value: "99.0" },
{ Indicator: "Population Rural (% of population)", Country: "China", Year: "2013", Value: "98.0" },
{ Indicator: "Population Urban (% of population)", Country: "India", Year: "2012", Value: "99.3" },
{ Indicator: "Population Urban (% of population)", Country: "India", Year: "2013", Value: "93.6" },
{ Indicator: "Population Urban (% of population)", Country: "Japan", Year: "2012", Value: "99.6" },
{ Indicator: "Population Urban (% of population)", Country: "Japan", Year: "2013", Value: "97.6" },
{ Indicator: "Population Urban (% of population)", Country: "China", Year: "2012", Value: "95.6" },
{ Indicator: "Population Urban (% of population)", Country: "China", Year: "2013", Value: "99.6" }];
我需要更改如下
var array=[{"Country":"India", "Indicator": "Population National (% of population)","2012": "98.8","2013": "99.1"},
{"Country":"India", "Indicator": "Population Rural (% of population)","2012": "97.9","2013": "98.2"},
{"Country":"India", "Indicator": "Population Urban (% of population)","2012": "99.3","2013": "93.6"},
{"Country":"Japan", "Indicator": "Population National (% of population)","2012": "99.2","2013": "99.3"},
{"Country":"Japan", "Indicator": "Population Rural (% of population)","2012": "98.4","2013": "98.7"},
{"Country":"Japan", "Indicator": "Population Urban (% of population)","2012": "99.6","2013": "97.6"},
{"Country":"China", "Indicator": "Population National (% of population)","2012": "99.4","2013": "99.8"},
{"Country":"China", "Indicator": "Population Rural (% of population)","2012": "99.0","2013": "98.0"},
{"Country":"China", "Indicator": "Population Urban (% of population)","2012": "95.6","2013": "99.6"}
];
我尝试了每种方法,并在数组中循环以创建新的数组,但无法实现所需的格式
这就是我所做的
var excelArr = [],tempCountryArr=[],tempIndicArr=[],tempYearArr=[];
_.each(array, function (val, i) {
if (_.contains(tempCountryArr, val.Country) == false) {
tempCountryArr.push(val.Country);
}
if (_.contains(tempIndicArr, val.Indicator) == false) {
tempIndicArr.push(val.Indicator);
}
if (_.contains(tempYearArr, val.Year) == false) {
tempYearArr.push(val.Year);
}
});
for (var i = 0; i < tempCountryArr.length; i++) {
var countrydata = _.filter(array, function (item) {
return (item.Country == tempCountryArr[i] && item.Indicator == tempIndicArr[i]);
});
var indicator = [];
for (var j = 0; j < countrydata.length; j++) {
for (var k = 0; k < tempYearArr.length; k++) {
var yrArr = "";
var yeardata = _.filter(countrydata, function (item) {
return (item.Year == tempYearArr[k] && item.Indicator == countrydata[j].Indicator && item.Country == tempCountryArr[i]);
});
yrArr = tempYearArr[k];
if (yeardata.length > 0) {
if (yeardata[0].Value != null && yeardata[0].Value != undefined && yeardata[0].Value != "NaN") {
if (excelArr.length != 0 && excelArr[j] != undefined) {
excelArr[j][yrArr] = yeardata[0].Value;
} else {
excelArr.push({ [yrArr]: yeardata[0].Value });
}
} else {
if (excelArr.length != 0 && excelArr[j] != undefined) {
excelArr[j][yrArr] = "NA";
}
else {
excelArr.push({ [yrArr]: "NA" });
}
}
}
else {
if (excelArr.length != 0 && excelArr[j] != undefined) {
excelArr[j][yrArr] = "NA";
}
else {
excelArr.push({ yrArr: "NA" });
}
}
}
excelArr[j].Indicator = countrydata[j].Indicator.toString();
excelArr[j]["Country"] = countrydata[j].Country;
}
}
var excelArr=[]、tempCountryArr=[]、tempIndicatarr=[]、tempYearr=[];
_.每个(数组、函数(val、i){
if(uu.contains(tempCountryArr,val.Country)==false){
临时国家推力(val.Country);
}
如果(uu.contains(tempincarr,val.Indicator)=false){
温度指示器推力(值指示器);
}
如果(u.contains(tempYearr,val.Year)=false){
临时推力(val.Year);
}
});
对于(变量i=0;i0){
if(yeardata[0].Value!=null&&yeardata[0].Value!=undefined&&yeardata[0].Value!=NaN){
if(excelArr.length!=0&&excelArr[j]!=未定义){
excelArr[j][yrArr]=年度数据[0]。值;
}否则{
push({[yrArr]:yeardata[0].Value});
}
}否则{
if(excelArr.length!=0&&excelArr[j]!=未定义){
excelArr[j][yrArr]=“NA”;
}
否则{
excelArr.push({[yrArr]:“NA”});
}
}
}
否则{
if(excelArr.length!=0&&excelArr[j]!=未定义){
excelArr[j][yrArr]=“NA”;
}
否则{
excelArr.push({yrArr:“NA”});
}
}
}
excelArr[j]。Indicator=countrydata[j]。Indicator.toString();
excelArr[j][“国家”]=countrydata[j]。国家;
}
}
我正在寻求任何帮助。提前感谢您可以使用以下内容:
var数组=[{指标:“全国人口%”,国家:“印度”,年份:“2012”,数值:“98.8”},{指标:“全国人口%”,国家:“印度”,年份:“2013”,数值:“99.1”},{指标:“全国人口%”,国家:“日本”,年份:“2012”,数值:“99.2”},{指标:“全国人口%(人口%),国家:“日本”,年份:“2013年”,数值:“99.3”,{指标:“全国人口%(人口%)”,国家:“中国”,年份:“2012年”,数值:“99.4”),{指标:“全国人口%(人口%)”,国家:“中国”,年份:“2013年”,数值:“99.8”),{指标:“农村人口%”,国家:“印度”,年份:“2012年,数值:“97.9”),{指标:“农村人口”国家:“人口%”,国家:“印度”,年份:“2013”,数值:“98.2”},{指标:“农村人口%”,国家:“日本”,年份:“2012”,数值:“98.4”},{指标:“农村人口%”,国家:“日本”,年份:“2013”,数值:“98.7”},{指标:“农村人口%”,国家:“中国”,年份:“2012”,数值:“99.0”},{指标:“农村人口(占人口的百分比)”,国家:“中国”,年份:“2013年”,数值:“98.0”),{指标:“城市人口(占人口的百分比)”,国家:“印度”,年份:“2012年”,数值:“99.3”),{指标:“城市人口(占人口的百分比)”,国家:“印度”,年份:“2013年”,数值:“93.6”),{指标:“城市人口(占人口的百分比)”,国家:“日本”,年份:“2012年,数值:“99.6”,{指标:“城市人口%”,国家:“日本”,年份:“2013”,数值:“97.6”},{指标:“城市人口%”,国家:“中国”,年份:“2012”,数值:“95.6”},{指标:“城市人口%”,国家:“中国”,年份:“2013”,数值:“99.6”};
const merged=array.reduce((acc,{Indicator,Country,Year,Value})=>{
常量键=`${Country}-${Indicator}`
acc[关键]=acc[关键]|{国家,指标}
acc[关键][年份]=价值;
返回acc
}, {})
常量输出=对象值(合并);
console.log(输出)