【问题标题】:Sort an array of objects according to position of a string根据字符串的位置对对象数组进行排序
【发布时间】:2019-01-15 06:12:51
【问题描述】:

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

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,因为单词出现次数少于第三项。

有什么建议吗?

【问题讨论】:

  • 有什么问题?运行代码并确认它是否按预期工作
  • 你忘了问问题。您需要什么帮助?
  • @Teemu 我误解了问题。我想我们必须按字母顺序排序。因此将其标记为欺骗但即将撤回投票,因为我们必须根据索引位置进行排序。不过,我仍然对 OP 正在寻找什么感到困惑。提供的代码工作正常

标签: javascript arrays sorting


【解决方案1】:

排序比较需要一个整数而不是布尔值。 来自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');
}) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多