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

Luc*_*rdi 0 javascript arrays sorting

我想就这个小问题得到你的帮助.

我想根据代码值订购此数组,但不按字母顺序排序. (我用粗体指定了这个,但最终还是被标记了,人们甚至不关心阅读这个问题)

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

[
    { 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}
]
Run Code Online (Sandbox Code Playgroud)

是否可以使用sort函数执行此操作?那种情况会是什么情况?

Nin*_*olz 8

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

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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

对于未知颜色/值,您可以使用默认值

  • 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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)