首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将现有的数组转换为新的数组

将现有的数组转换为新的数组
EN

Stack Overflow用户
提问于 2019-03-12 07:40:49
回答 1查看 112关注 0票数 5

我有一个阵列,我要变成一个新的,适合我的工作。这是最初的ArrayI有:

注:在我的代码中,“jayanagar”、“mallashwaram”、“kolar”被称为城市。

代码语言:javascript
运行
复制
var array1=[
  ["Year", "2018-8", "2017-8"],
  ["JAYANAGAR", "2018-8", 10910665], 
  ["MALLESHWARAM", "2018-8", 2018451],
  ["KOLAR", "2018-8", 2277562], 
  ["JAYANAGAR", "2017-8", 1134]
]

从这里我把它转换成:

代码语言:javascript
运行
复制
var array2=[
  ["Year", "Jul 2018", "Jul 2017"], 
  ["JAYANAGAR", 10910665, 1134], 
  ["MALLESHWARAM", 2018451], 
  ["KOLAR", 2277562]
]

我想做的是

  • 正如您在arra1中所看到的,我有两年的时间,即2018-82017-8,对于date 2018-8,我拥有城市的所有数据,而对于date,2017-08只有一个城市数据,即jayanagar
  • 所以我想要做的是,当以前的约会中城市数量减少的时候,我想显示为那个城市的0
  • 例如,在array2中,我没有malleshwaramkolar的数据,所以我想在那里显示为0
  • 选择的年份用户将给我所有城市的名称,因此我想在这里循环其他日期数据,其中一个是array2
  • 最高日期总是有所有城市的名字。

我做了什么,

代码语言:javascript
运行
复制
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)
代码语言:javascript
运行
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

我的预期输出

代码语言:javascript
运行
复制
[
  [
    "Year",
    "Aug 2018",
    "Aug 2017"
  ],
  [
    "JAYANAGAR",
    10910665,
    1134
  ],
  [
    "MALLESHWARAM",
    2018451,
    0
  ],
  [
    "KOLAR",
    2277562,
    0
  ]
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 07:55:50

此解决方案创建对象,通过相同的键存储所有数据,其中键是城市,然后创建另一个数组,该数组以所需的输出格式格式化数组。

代码语言:javascript
运行
复制
    var input = [
      ["Year", "2018-8", "2017-8"],
      ["JAYANAGAR", "2018-8", 10910665],
      ["MALLESHWARAM", "2018-8", 2018451],
      ["KOLAR", "2018-8", 2277562],
      ["JAYANAGAR", "2017-8", 1134]
    ];
    
   
  
  var cities = {};
  var years = input[0]; 

  
function formatDate(date, index){

if(index === 0){ //skip formatting, because it is not a date
  return date;
}
  dates = {
  '1' : 'Jan',
  '2' : 'Feb',
  '3' : 'Mar',
  '4' : 'Apr',
  '5' : 'May',
  '6' : 'Jun',
  '7' : 'Jul',
  '8' : 'Aug',
  '9' : 'Sep',
  '10': 'Oct',
  '11': 'Nov',
  '12': 'Dec'
  };

  let dateArr = date.split('-');

  return dates[dateArr[1]] + ' ' + dateArr[0];
 
}


years = years.map(formatDate); //run through dates array. 


  
  //store data in object items, where each key is city , and items are arrays of data
  input.forEach(function(element,index) {
    if(index !== 0){
    if( cities[element[0]] === undefined){
       cities[element[0]] = [];
    }
    
      cities[element[0]].push(element[2]); // add to city item new data
      
    }
  });
  

 var citiesData = []; 
 for (var city in cities) { //reformat the data in format [city, ...data]
    if (cities.hasOwnProperty(city)) {
      //  citiesData.push
     cities[city].unshift(city); //add city as first item in array
     if(years.length > cities[city].length){ //assuming that data should be available for each year, check the length and fill with zeroes 
     let fillsLength =  years.length -  cities[city].length;
     let fills = Array(fillsLength).fill(0, 0, fillsLength); //fill with zeros x times of missing data per each year
     cities[city] = cities[city].concat(fills); //concat array of zeros with city data
     }
     citiesData.push(cities[city]);
    }
}

citiesData.unshift(years);

console.log(citiesData); 

日期注意:与其使用日期和日期方法,不如使用包含每月值缩写的对象和为月份键保存数字格式的对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55116331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档