基于某些字符串的Javascript排序数组

时间:2019-03-04 23:08:34

标签: javascript

基本上,我正在尝试根据某个字符串匹配对数组进行排序。 我希望限定词==='oip'排在顶部

[
 {
  qualifier: 'abc',
 },
 {
  qualifier: 'oip'
 }
]

我该如何使用x.sort((a,b) =>

2 个答案:

答案 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)

如果您要对其余元素应用其他类型的排序(ascendingdescending),并在顶部将具有限定符等于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;}