对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);