Javascript基于字段值的任意排序数组

时间:2016-08-26 20:52:22

标签: javascript arrays ecmascript-6

所以我有一个对象数组,如下所示:

var myArray = [{priority : "low"}, {priority: "critical"}, {priority: "high"}]

我需要以这种方式排序:1)严重,2)高和3)低。

怎么办呢?

2 个答案:

答案 0 :(得分:4)

我建议使用一个对象来存储排序顺序。

如果您需要一个默认值进行排序,您可以使用一个值来排序未知优先级以开始或结束。

var sort = ['critical', 'high', 'low'],
    defaultValue = Infinity,
    sortObj = {},
    myArray = [{ priority: "unknown" }, { priority: "low" }, { priority: "critical" }, { priority: "high" }];

sort.forEach(function (a, i) { sortObj[a] = i + 1; });

myArray.sort(function (a, b) {
    return (sortObj[a.priority] || defaultValue) - (sortObj[b.priority] || defaultValue);
});
	
console.log(myArray);

答案 1 :(得分:2)

使用将优先级名称映射到数字的对象,然后根据该值进行排序。



var priorities = {
  low: 0,
  high: 1,
  critical: 2
};

var myArray = [{
  priority: "low"
}, {
  priority: "critical"
}, {
  priority: "high"
}]

myArray.sort(function(a, b) {
  return priorities[b.priority] - priorities[a.priority];
});

console.log(myArray);