сортировка массива в Javascript по определенному значению ключа и повторная сортировка по другому значению ключа

1

Массив содержит список значений, как показано ниже:

    Object {status: "Pen"
    apptDate:"12-06-2001 04:00 PM "
    func:"OOS"}

  Object {status: "Pen"
    apptDate:"14-03-2001 04:00 PM "
    func:"OOS"}

    Object {status: "Pen"
    apptDate:"15-09-2001 04:00 PM "
    func:"OOS"}

 Object {status: "Pen"
    apptDate:"11-01-2001 04:00 PM "
    }

   Object {status: "Pen"
    apptDate:"10-02-2001 04:00 PM "
    }

Необходимо создать новый массив, основанный на текущем массиве, который будет иметь значение object.func как "OOS", сначала должен быть нажат внутри массива, сохраняя apptDate в порядке возрастания, не добавляя значения в object.func, затем сортируйте сортировку массив на основе apptDate в порядке возрастания

  • 0
    Я не понимаю вашего вопроса.
  • 2
    Кстати, 15-18-2001 не является действительной датой.
Показать ещё 1 комментарий
Теги:
arrays
sorting

2 ответа

2

С помощью строки даты ISO 8601 вы можете использовать String#localeCompare, но при этом сортировка 'OOS' String#localeCompare сверху.

var array = [{ status: "Pen", apptDate: "2001-06-12 04:00", func: "OOS" }, { status: "Pen", apptDate: "2001-03-14 04:00", func: "OOS" }, { status: "Pen", apptDate: "2001-09-15 04:00", func: "OOS" }, { status: "Pen", apptDate: "2001-01-11 04:00" }, { status: "Pen", apptDate: "2001-02-10 04:00" }];

array.sort(function (a, b) {
    return (b.func === 'OOS') - (a.func === 'OOS') || a.apptDate.localeCompare(b.apptDate);
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
  • 0
    2001-06-12-06-2001 дата: 2001-06-12-06-2001
  • 0
    @NisargShah, хорошо заметили.
Показать ещё 2 комментария
0

Вы можете использовать array.sort с функцией сравнения, например:

function(a,b){
    if(a.func && a.func == "OOS" && a.func != b.func){
    return -1;
  } else {
    return new Date(a.apptDate) - new Date(b.apptDate);
  }
}

Примечание. Я обновил некоторые даты, чтобы сделать их действительными.

var arr = [{
  status: "Pen",
  apptDate: "12-18-2001 04:00 PM ",
  func: "OOS"
}, {
  status: "Pen",
  apptDate: "9-18-2001 04:00 PM ",
  func: "OOS"
}, {
  status: "Pen",
  apptDate: "11-18-2001 04:00 PM ",
  func: "OOS"
}, {
  status: "Pen",
  apptDate: "11-18-2001 04:00 PM "
}, {
  status: "Pen",
  apptDate: "10-18-2001 04:00 PM "
}];

arr.sort(function(a,b){
	if(a.func && a.func == "OOS" && a.func != b.func){
  	return -1;
  } else {
  	return new Date(a.apptDate) - new Date(b.apptDate);
  }
});

console.log(arr);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню