对Javascript对象数组进行排序

对Javascript对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有以下代码: function compare(a,b) { if (a.title < b.title) return -1; if (a.title > b.title) return 1; return 0; } . . setsArr.sort(compare); 功能比较(a、b){ 如果(a.标题b.标题) 返回1; 返回0; } . . 设置字符排序(比较); 这应该根据数组对象的title属性按字母顺序对其

我有以下代码:

function compare(a,b) {
    if (a.title < b.title)
        return -1;
    if (a.title > b.title)
        return 1;
    return 0;
}
.
.
setsArr.sort(compare);
功能比较(a、b){
如果(a.标题b.标题)
返回1;
返回0;
}
.
.
设置字符排序(比较);
这应该根据数组对象的title属性按字母顺序对其进行排序。但是,当标题中有空格时,该标题将出现在其他标题之前,并且没有空格,除非这些标题以数字或特殊字符开头

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

  • 3xd

  • 我的小马

  • 阿拉丁

  • 蝙蝠侠


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

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

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”、“我的小马”、“阿拉丁”、“另一个有空格的”、“蝙蝠侠”];
功能比较(a、b){
var aHasSpace=a.indexOf(“”!=-1;
var bHasSpace=b.indexOf(“”!=-1;
if(aHasSpace!=bHasSpace){
返回一个空格?1:-1;
}
返回a.localeCompare(b);
}
标题。排序(比较);
document.body.innerHTML=JSON.stringify(标题)

return
[“3xd”、“阿拉丁”、“蝙蝠侠”、“我的小马”]

不区分大小写或区分大小写?这可能有助于u:这不清楚。你想让所有有空格的条目都在末尾吗?或者根据,我不知道,第一个字母——所以“我的小马驹”应该在“缅甸”之后,但在“尼加尔”之前?你是说有空格的项目应该在没有空格的项目之前,但是你说“除非这些标题以数字或特殊字符开头。”。那是什么意思?如果它们以数字或特殊字符开头,并且有一个空格,那么它们是否都应该在开头分组?或者它们应该按字母顺序排列,不带空格吗?还是应该删除空格进行排序?这些标题是指有空格的标题,还是没有空格的标题。这很有效。我不得不做一个小的编辑,因为它是一个对象数组。所以我让它
返回a.title.replace(//g',).localeCompare(b.title.replace(//g',)我想你会发现它被欺骗了,比如说,
['3xd','BatmanReturns','batman2k','Batman']
。(@Mardymar,仅供参考)“蝙蝠侠”不应该排在“另一个有空间的人”之后吗?还是我误解了标准?@斯奎特:我以为标准是把所有包含空格的地方放在末尾,排序。我可能是唯一一个误会的人。问题中的例子很不清楚。我想也许我们都错了,好像他说的是1)以特殊字符或数字开头的项目,2)包含空格的项目,3)所有其他项目都按字母顺序排序。虽然他的描述中的“除非”可以用两种不同的方式来解释。
var setsArr = [ '3xd', 'My Little Pony', 'Aladdin', 'Batman' ];

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

setsArr.sort(compare);