基于某个键值在Javascript中进行数组排序,并根据另一个键值再次排序

时间:2017-08-09 09:18:14

标签: javascript arrays sorting

数组包含值列表,如下所示:

    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保持为asc顺序,在object.func中不存在任何值,然后按照asc顺序对基于apptDate的数组进行排序

2 个答案:

答案 0 :(得分:2)

使用ISO 8601日期字符串,您可以使用String#localeCompare,同时尊重'OOS'排序。

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; }

答案 1 :(得分: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);