Упорядочивать договоренность в месяц и год, равного способа неделя и год Javascript

У меня есть договоренность следующего способа:

var monthYear = ["1-2016", "7-2015", "7-2016", "3-2016", "8-2016", "2-2016", "6-2016", "8-2015", "5-2016", "4-2016", "9-2015", "10-2015", "11-2015", "12-2015"];

В этой договоренности он показывает меня в месяце и год, я хочу упорядочить это в месяц и год, и что остался следующего способа:

 var monthYear = ["7-2015", "8-2015", "9-2015", "10-2015", "11-2015", "12-2015", "1-2016", "2-2016", "3-2016", "4-2016", "5-2016", "6-2016", "7-2016", "8-2016"];

равного способа в недели:

var weekYear = ["2015-30", "2015-31", "2015-32", "2015-33", "2015-34", "2015-35", "2015-36", "2015-37", "2015-38", "2015-39", "2015-40", "2015-41", "2015-42", "2015-44", "2015-49", "2016-06", "2016-09", "2015-43", "2015-45", "2015-46", "2015-47", "2015-48", "2015-50", "2015-51", "2015-52", "2016-01", "2016-02", "2016-03", "2016-04", "2016-05", "2016-07", "2016-08", "2016-10", "2016-11", "2016-12", "2016-13", "2016-14", "2016-15", "2016-16", "2016-17", "2016-18", "2016-19", "2016-20", "2016-21", "2016-22", "2016-23", "2016-24", "2016-25", "2016-26", "2016-27", "2016-28", "2016-29", "2016-30", "2016-31", "2016-32"];

var weekYear = ["2015-30", "2015-31", "2015-32", "2015-33", "2015-34", "2015-35", "2015-36", "2015-37", "2015-38", "2015-39", "2015-40", "2015-41", "2015-42", "2015-43", "2015-44", "2015-45", "2015-46", "2015-47", "2015-48", "2015-49", "2015-50", "2015-51", "2015-52", "2016-01", "2016-02", "2016-03", "2016-04", "2016-05", "2016-06", "2016-07", "2016-08", "2016-09", "2016-10", "2016-11", "2016-12", "2016-13", "2016-14", "2016-15", "2016-16", "2016-17", "2016-18", "2016-19", "2016-20", "2016-21", "2016-22", "2016-23", "2016-24", "2016-25", "2016-26", "2016-27", "2016-28", "2016-29", "2016-30", "2016-31", "2016-32"];

Я попробовал использовать эту функцию, но оно не функционирует:

monthYear = monthYear.sort(sortNumber);

function sortNumber(elem1, elem2){
        var as = elem1.split('-');
        var bs = elem2.split('-');
        if(parseInt(as[0])< parseInt(bs[0])){
          if(parseInt(as[1]) < parseInt(bs[1])){
            return -1;
          }else if(parseInt(as[1]) > parseInt(bs[1])){
            return 1;
          }else{
            return 0;
          }
        }else if(parseInt(as[0]) > parseInt(bs[0])){
          return 1;
        }
        return 0;
      }

Равного способа с неделями, я хотел бы знать, плохая ли функция, или если существует способ, более легкий для того, чтобы это быть сделанным.

2
задан 22.08.2016, 17:23
2 ответа

Очень хорошо, что ты делаешь, только нужно исправлять порядок, в котором comparás:

var monthYear = ["1-2016", "7-2015", "7-2016", "3-2016", "8-2016", "2-2016", "6-2016", "8-2015", "5-2016", "4-2016", "9-2015", "10-2015", "11-2015", "12-2015"];

function sortNumber(elem1, elem2) {
    var as = elem1.split('-');
    var bs = elem2.split('-');
    if (parseInt(as[1],10) < parseInt(bs[1],10)) {  //Primero comparar el año
        return -1;
    } else if (parseInt(as[1],10) > parseInt(bs[1],10)) {  //o si es mayor
        return 1;
    } else if (parseInt(as[0],10) < parseInt(bs[0],10)) { //año igual => mes
        return -1;
    } else if (parseInt(as[0],10) > parseInt(bs[0],10)) { //o si el mes es mayor
        return 1;
    } else { //y si ambos son iguales
        return 0;
    }
}

console.log(monthYear.sort(sortNumber));

Заметьте себе, что parseInt() всегда будь должен приносить второй параметр. В этом случае 10 (основание 10).
*Благодаря @devconcept из-за того, что это помнит.

Другой случай оставил это тебе как упражнение.

1
ответ дан 24.11.2019, 13:35

Я предлагаю тебе один pequeГ±o" truco", чтобы упорядочивать даты:

Имея в виду твой Array weekYear:

var weekYear = ["2015-30", "2015-31",...];

Приходит в совершенной форме, чтобы сравнивать их" números" а именно,

201530 < 201531 < ... < 201601 < ....

AsГ - так как он сравнивает в ней funciГіn sort они nГєmeros произведенные снимания - и произвождения nГєmero.

Для Array monthYear, ты должен делать предварительный шаг, agregarle un "0" si el número del mes es menor que 10 и сравнивать nГєmero произведенный предпочитая aГ±o в неделю :

var weekYear = ["2015-30", "2015-31", "2015-32", "2015-33", "2015-34", "2015-35", "2015-36", "2015-37", "2015-38", "2015-39", "2015-40", "2015-41", "2015-42", "2015-44", "2015-49", "2016-06", "2016-09", "2015-43", "2015-45", "2015-46", "2015-47", "2015-48", "2015-50", "2015-51", "2015-52", "2016-01", "2016-02", "2016-03", "2016-04", "2016-05", "2016-07", "2016-08", "2016-10", "2016-11", "2016-12", "2016-13", "2016-14", "2016-15", "2016-16", "2016-17", "2016-18", "2016-19", "2016-20", "2016-21", "2016-22", "2016-23", "2016-24", "2016-25", "2016-26", "2016-27", "2016-28", "2016-29", "2016-30", "2016-31", "2016-32"];

var sortWeekYear = weekYear.sort(function(a, b){
  return +a.split('-').join('') - +b.split('-').join('');
});

console.log(sortWeekYear);

var monthYear = ["1-2016", "7-2015", "7-2016", "3-2016", "8-2016", "2-2016", "6-2016", "8-2015", "5-2016", "4-2016", "9-2015", "10-2015", "11-2015", "12-2015"];

var sortMonthYear = monthYear
.map(function(el){
  var parts = el.split('-');
  if(parts[0].length <=  1) parts[0] = '0' + parts[0];
  return parts.join('-');
})
.sort(function(a, b){
  return +a.split('-').reverse().join('') - +b.split('-').reverse().join('');
});

console.log(sortMonthYear);
2
ответ дан 24.11.2019, 13:35
  • 1
    Итак, так как ты это говоришь array, он прибывает ко мне без "-" а именно 201631 то, что я делаю, состоит в том, чтобы помещать - и так мочь упорядочивать это –  Fabian Sierra 22.08.2016, 18:19