一尘不染

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

javascript

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

我想根据 代码而不是字母顺序 对数组 进行排序。
我用粗体字指定了该名称,但最终还是被标记出来了,人们甚至都不在乎阅读该问题

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

[
    { 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 函数可以做到这一点吗?在这种情况下会是什么情况?


阅读 347

收藏
2020-05-01

共1个答案

一尘不染

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

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; }
2020-05-01