按属性对对象数组进行排序(具有自定义顺序,而不是字母顺序)

我想就这个小问题得到您的帮助。

我想根据 代码 值 对数组 (

我用粗体字指定了该名称,但最终还是被标记出来了,人们甚至都不在乎阅读该问题

例如,我想有所有 绿色的 对象,那么所有的 蓝色 的人,然后将所有的 红色 的。最好的方法是什么?

[

{ code: "RED", value: 0},

{ code: "BLUE", value: 0},

{ code: "RED", value: 0},

{ code: "GREEN", value: 0},

{ code: "BLUE", value: 0},

{ code: "RED", value: 0},

{ code: "GREEN", value: 0},

{ code: "BLUE", value: 0}

]

使用 sort 函数可以做到这一点吗?在这种情况下会是什么情况?

回答:

您可以为所需订单取一个对象。

var array = [{ code: "RED", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }],

order = { GREEN: 1, BLUE: 2, RED: 3 };

array.sort(function (a, b) {

return order[a.code] - order[b.code];

});

console.log(array);

.as-console-wrapper { max-height: 100% !important; top: 0; }

对于未知的颜色/值,可以将默认值与

  • 0,用于排序到顶部或
  • Infinity 为了排序到最后,
  • 或用于在其他组之间进行排序的任何其他值。

最后,您可以使用逻辑OR||链接的其他排序部分对特殊处理的项目进行排序。

var array = [{ code: "YELLOW", value: 0 }, { code: "BLACK", value: 0 }, { code: "RED", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }, { code: "RED", value: 0 }, { code: "GREEN", value: 0 }, { code: "BLUE", value: 0 }],

order = { GREEN: 1, BLUE: 2, RED: 3, default: Infinity };

array.sort(function (a, b) {

return (order[a.code] || order.default) - (order[b.code] || order.default) || a.code.localeCompare(b.code);

});

console.log(array);

.as-console-wrapper { max-height: 100% !important; top: 0; }

以上是 按属性对对象数组进行排序(具有自定义顺序,而不是字母顺序) 的全部内容, 来源链接: utcz.com/qa/398922.html

回到顶部