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

Jek*_*eka 1 javascript arrays ecmascript-6

所以我有一个看起来像这样的对象数组:

var myArray = [{priority : "low"}, {priority: "critical"}, {priority: "high"}]
Run Code Online (Sandbox Code Playgroud)

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

如何才能做到这一点?

Bar*_*mar 5

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

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);
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 5

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

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

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);
Run Code Online (Sandbox Code Playgroud)