根据字符串的位置对对象数组进行排序

时间:2019-01-15 06:12:52

标签: javascript arrays sorting

我正在尝试根据“餐厅”字符串在标题字段中的位置对对象数组进行排序

var test = [{
    title: 'Roy Restaurant'
  },
  {
    title: 'Restaurant'
  },
  {
    title: 'Roy Mega Restaurant'
  }
];

console.log(test.sort(function(a, b) {
  return a.title.toLowerCase().indexOf('restaurant') > b.title.toLowerCase().indexOf('restaurant');
}));

所以我的预期输出是

var test = [
    {
    title : 'Restaurant'
  },
  {
    title : 'Roy Restaurant'
  },
  {
    title : 'Roy Mega Restaurant'
  }
];

因此请按其indexOf值对其进行排名。在上方,第一项indexOf的值为0,因此它必须是第一项第二项Roy Restaurant,因为单词的出现少于第三项。

有什么需要帮助的想法吗?

1 个答案:

答案 0 :(得分:0)

排序比较需要一个整数而不是布尔值。 来自MDN

  

如果compareFunction(a,b)小于0,则将a排序为小于以下的索引   b(即a优先)

在第14行将>更改为-

var test = [
    {
    title : 'Roy Restaurant'
  },
  {
    title : 'Restaurant'
  },
  {
    title : 'Roy Mega Restaurant'
  }
];

console.log( test.sort(function(a,b){
    return a.title.toLowerCase().indexOf('restaurant') - b.title.toLowerCase().indexOf('restaurant');
}) );