根据日期重新排列数据

时间:2017-10-04 07:39:27

标签: javascript

我有以下一组字符串数组,我需要根据日期重新排列最终输出,这些日期需要最早排序到最早

[
  "2015-08, xyz, 4",
  "2016-03, abc, 5",
  "2015-12, ter, 76",
  "2015-12, rep, 14"
]

最终输出需要看起来像

[
  "2016-03, abc, 5",
  "2015-12, ter, 76, rep, 14",
  "2015-08, xyz, 4"
]

我该怎么做?

1 个答案:

答案 0 :(得分:2)

不是一个完整的解决方案,但它会为您提供实施自己的基础。

对数据进行排序:

我们的想法是你定义一个函数(在我们的例子中为SortByDate),其中包含如何比较两个数组元素的逻辑,然后使用参数new函数调用默认的sort函数你定义了。

data = [
  "2015-08, xyz, 4",
  "2016-03, abc, 5",
  "2015-12, ter, 76",
  "2015-12, rep, 14"
];



//This is the logic
function SortByDate(a, b){
  dateA  = a.split(",")[0];     // e.g. a="2015-08, xyz, 4" dateA="2015-08"
  yearA  = dateA.split("-")[0]; // e.g. "2015"
  monthA = dateA.split("-")[1]; // e.g. "08"
  
  dateB  = b.split(",")[0];
  yearB  = dateB.split("-")[0];
  monthB = dateB.split("-")[1];
  
  if (parseInt(yearA) < parseInt(yearB)) return -1;
  if (parseInt(yearA) > parseInt(yearB)) return 1;
  if (parseInt(yearA) == parseInt(yearB)) {
    if (parseInt(monthA) < parseInt(monthB)) return -1;
    if (parseInt(monthA) > parseInt(monthB)) return 1;
    if (parseInt(monthA) == parseInt(monthB)) return 0;
  }

}

data.sort(SortByDate);
console.log(data);

后续步骤:

  1. 再次迭代你的数组
  2. 如果您找到相同的日期
  3. 合并这些元素
  4. 最后一部分可能很棘手,因为你的数组会丢失一些元素,它的大小会减少。您可能需要查看此内容:Looping through array and removing items