首页 > 解决方案 > 按月和年对数组进行排序

问题描述

我需要帮助按月和年对数组进行排序以分别显示在图表上。

Array1: ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'....];
Desired Output : [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];

根据上面的数组,我还有另一个数组,每个月的值分别

Array2: ['Mar19_value','Apr18_value','Jun18_value','Jul18_value','May18_value'
       ,'Jan19_value'....];

Array2: ['55','2','3','0','21','132'....]; //real values

monthyear数组排序时,我希望这个数组中的数据根据​​位置移动到一个新的monthyear位置。像这样:

Desired Array1: [....'Apr18','May18','Jun18','Jul18','Jan19','Mar19'];
Desired Array2: [....'Apr18_value','May18_value','Jun18_value','Jul18_value','Jan19_value','Mar19_value'];

所以我可以稍后像这样选择数据:

var label = array[4];
var value = array2[4];

如何实现?

标签: javascripthtmlarrayssorting

解决方案


您需要将字符串更改为new Date(dateString)格式

new Date(Month Date Year)

更新了两个数组的正则表达式模式

https://regex101.com/r/h1cm1z/2/

根据第一个数组排序索引更新了对第二个数组进行排序

var arr1 =  ['Mar19','Apr18','Jun18','Jul18','May18','Jan19'];
var arr2 =['55','2','3','0','21','132'];

function datesort(arr){
 return arr.concat().sort((a,b)=>{
 a = a.replace(/(\d+)(.*)/g,' 1 $1'); // Month 1 YEAR
 b = b.replace(/(\d+)(.*)/g,' 1 $1'); // Month 1 YEAR
  return new Date(a) - new Date(b)
})
}

var after_arr1 =new datesort(arr1);
var after_arr2 = arr1.reduce(function(a,b,c){
     var ind = after_arr1.indexOf(b);
     a[ind] = arr2[c]
     return a
},[]);


console.log(after_arr1.join(','));
console.log(after_arr2.join(','))


推荐阅读