【问题标题】:Sorting Javascript array of objects [duplicate]对对象的Javascript数组进行排序[重复]
【发布时间】:2023-03-26 21:15:01
【问题描述】:

我有以下代码:

function compare(a,b) {
    if (a.title < b.title)
        return -1;
    if (a.title > b.title)
        return 1;
    return 0;
}
.
.
setsArr.sort(compare);

这应该根据它们的标题属性按字母顺序对数组对象进行排序。但是,当标题中有空格时,除非这些标题以数字或特殊字符开头,否则该标题将出现在其他没有空格的标题之前。

有序列表的一个例子可以是:

  • 3xd

  • 我的小马驹

  • 阿拉丁

  • 蝙蝠侠

我希望“我的小马驹”排在最后。我怎么能做到这一点?

【问题讨论】:

  • 不区分大小写或敏感?
  • 这可能对你有帮助:*.com/questions/1179366/…
  • 这还不清楚。您是否希望 all 有空格的条目在末尾,毕竟没有?或者基于,我不知道,第一个字母——所以“My Little Pony”会在“Myanmar”之后但在“Nygaard”之前?
  • 你是说有空格的项目应该排在没有空格的之前,但你说“除非这些标题以数字或特殊字符开头。”。那么这是什么意思呢?如果它们以数字或特殊字符开头并带有空格,它们是否应该在开头进行分组?还是应该按字母顺序对它们进行排序?还是应该在删除空格的情况下对它们进行排序?
  • “那些标题” 是指那些有空格的,还是没有空格的。

标签: javascript arrays sorting


【解决方案1】:
var setsArr = [ '3xd', 'My Little Pony', 'Aladdin', 'Batman' ];

function compare(a,b) {
    return a.replace(/ /g, '').localeCompare(b.replace(/ /g, ''));
}

setsArr.sort(compare);

返回["3xd", "Aladdin", "Batman", "My Little Pony"]

【讨论】:

  • 这行得通。我不得不做一个小的编辑,因为它是一个对象数组。所以我做到了return a.title.replace(/ /g, '').localeCompare(b.title.replace(/ /g, ''));
  • 我想你会发现它被 ['3xd', 'BatmanReturns', 'Batman 2k', 'Batman'] 欺骗了。 (@Mardymar,仅供参考)
【解决方案2】:

这实际上只是一般情况的一个特例:我如何按两个标准进行排序?在这种情况下,第一个标准是一个或两个条目是否有空格:

function compare(a,b) {
  var aHasSpace = a.indexOf(" ") != -1;
  var bHasSpace = b.indexOf(" ") != -1;

  if (aHasSpace != bHasSpace) {
    return aHasSpace ? 1 : -1;
  }
  return a.localeCompare(b);
}

为了简单起见,还要注意使用localeCompare

实例:

var titles = ["3xd", "My Little Pony", "Aladdin", "Another One With A Space", "Batman"];

function compare(a,b) {
  var aHasSpace = a.indexOf(" ") != -1;
  var bHasSpace = b.indexOf(" ") != -1;
  
  if (aHasSpace != bHasSpace) {
    return aHasSpace ? 1 : -1;
  }
  return a.localeCompare(b);
}

titles.sort(compare);
document.body.innerHTML = JSON.stringify(titles);

【讨论】:

  • “蝙蝠侠”不应该出现在“另一个有空格的人”之后吗?还是我误解了标准?
  • @squint:我认为标准是把所有包含的空格放在最后,排序。我可能是一个误解。问题中的示例非常不清楚。
  • 我想也许我们都错了,好像他在说 1) 以特殊字符或数字开头的项目,2) 包含空格的项目 3) 所有其余部分按字母顺序排序。尽管他的描述中的“除非”可以用几种不同的方式来解释。