首页 > 解决方案 > 如何使用自定义顺序对对象数组进行排序?

问题描述

我有一个像这样的对象数组:

[
    {keyword: 'E', value: '5'},
    {keyword: 'C', value: '3'},
    {keyword: 'B', value: '2'},
    {keyword: 'D', value: '4'},
    {keyword: 'A', value: '1'},
    {keyword: 'F', value: '6'},
    ...
]

我从其他地方收到这个数组,我无法控制来源,它的顺序也可以是完全随机的。

现在我想按关键字的升序对数组进行排序,但交换 2 个对象除外。我知道要交换的对象的关键字,比如上面数组中的 C 和 D。所以我希望最终的结果是这样的:

[
    {keyword: 'A', value: '1'},
    {keyword: 'B', value: '2'},
    {keyword: 'D', value: '4'},
    {keyword: 'C', value: '3'},
    {keyword: 'E', value: '5'},
    {keyword: 'F', value: '6'},
    ...
]

我必须遵循代码,但我不知道将其余代码放在哪里。请帮忙!

myArray.sort(function(a, b){
     return a.keyword.toLowerCase().localeCompare(b.keyword.toLowerCase());
});

标签: javascriptjquery

解决方案


var myArray = [
  {keyword: 'E', value: '5'},
  {keyword: 'C', value: '3'},
  {keyword: 'B', value: '2'},
  {keyword: 'D', value: '4'},
  {keyword: 'A', value: '1'},
  {keyword: 'F', value: '6'}
];

var specialKeywords = [ 'C', 'D' ];

myArray.sort(function(a, b){
  //if the two being compared are 'C' and 'D', treat them special
  if (specialKeywords.indexOf(a.keyword) +1
  && specialKeywords.indexOf(b.keyword) +1) {
    //if a is 'C', it needs to be greater than 'D'
    if (a.keyword = 'C') return 1;
    else return -1;
  } else {
    //one of the elements is not 'C' or 'D', process normally.
    return a.keyword.toLowerCase().localeCompare(b.keyword.toLowerCase());
  }
});

console.log(myArray);


推荐阅读