排序对象数组时忽略“The”

时间:2017-01-19 20:41:22

标签: javascript sorting

我有一个数组:

var array = {
 "mylist": [
    {
      "item1": "The Ba",
      "id": 1
    },
    {
      "item1": "Hurts Ama",
      "id": 2
    }
   ]
}

并对它们进行排序我使用以下函数:

function sortByItem(a,b) {
 if (a.item1 < b.item1)
  return -1;
 if (a.item1 > b.item1)
  return 1;
return 0;
}

给我输出

[Hurts Ama, The Ba]

但是,我不希望在比较时包含“The”,因此输出实际上是:

[Ba, Hurts Ama]

2 个答案:

答案 0 :(得分:2)

您可以使用以下空格替换开头的the

var array = [{ item1: "The Ba", id: 1 }, { item1: "Hurts Ama", id: 2 }, { item1: "Thereafter ", id: 3 }];

array.sort(function (a, b) {
    function getStripped(s) { return s.replace(/^the\s+/i, ''); }

    return getStripped(a.item1).localeCompare(getStripped(b.item1));
});

console.log(array)
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:-1)

首先映射每个对象的转换函数,以删除任何&#34;&#34;然后按

运行排序
function transform(item) {
   return {
       id: item.id,
       item: item.replace("The ","")
   }
}

var list = 
[
    {
        "item": "The Ba",
        "id": 1
    }, 
    {
        "item": "Hurts Ama",
        "id": 2
    }
]
list.map(transform).sort(sortByItem)