基本上,我正在尝试根据某个字符串匹配对数组进行排序。 我希望限定词==='oip'排在顶部
[
{
qualifier: 'abc',
},
{
qualifier: 'oip'
}
]
我该如何使用x.sort((a,b) =>
答案 0 :(得分:4)
这应该做:
x.sort((a,b) => a === 'oip'? 1 : -1)
您可以了解有关sort here的更多信息。
如果a和b是要比较的两个元素,则:
- 如果compareFunction(a,b)小于0,则将a排序为小于b的索引(即a排在最前面)。
- 如果compareFunction(a,b)返回0,则a和b彼此保持不变,但对所有不同元素进行排序。注意:ECMAscript标准不能保证此行为,因此并非所有浏览器(例如,至少可追溯到2003年的Mozilla版本)都遵守此规定。
- 如果compareFunction(a,b)大于0,则将b排序为小于a的索引(即b首先出现)。
当给定一对特定的元素a和b作为其两个参数时,- compareFunction(a,b)必须始终返回相同的值。如果返回的结果不一致,则排序顺序不确定。
此答案适用于OP所述的示例。但是,为了更完整(感谢指出@Pointy),以下是完整版本:
x = [
{qualifier: 'abc'},
{qualifier: 'oip'},
{qualifier: 'def'},
{qualifier: 'gij'},
{qualifier: 'oip'},
];
y = x.sort((a, b) => {
if (a.qualifier === b.qualifier && a.qualifier === 'oip') {
return 0;
} else if (a.qualifier === 'oip') {
return -1;
} else if (b.qualifier === 'oip') {
return 1;
}else {
return a.qualifier > b.qualifier? 1 : -1;
}
});
答案 1 :(得分:2)
如果您要对其余元素应用其他类型的排序(ascending
或descending
),并在顶部将具有限定符等于oip
的元素,则可以做类似的事情(在示例中,其余元素应用了升序):
const input = [
{qualifier: 'abc', id: "1"},
{qualifier: 'oip', id: "2"},
{qualifier: 'def', id: "3"},
{qualifier: 'oip', id: "4"},
];
input.sort(({qualifier: q1}, {qualifier: q2}) =>
{
if (q1 === 'oip' && q2 === 'oip')
return 0;
else if (q1 === 'oip')
return -1;
else if (q2 === 'oip')
return 1;
else
return q1.localeCompare(q2);
});
console.log(input);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}