Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中基于多个键对数组进行分组和转换?_Javascript_Jquery_Arrays_Json - Fatal编程技术网

如何在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

大家好,我是javascript新手,我想在我的项目中将数组的格式更改为新格式

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(输出)