非拉丁字符排序失败

3

我在对数组对象中的非拉丁字符串进行排序时遇到了问题。 我在代码中使用了_.sortBy(object, 'name')来按名称排序。 这是我的波斯文本数组:

[['id':1,'name':'ب'],['id':2,'name':'ج'],['id':3,'name':'اما']]

排序后输出应该如下所示:
['id':3,'name':'اما'],['id':1,'name':'ب'],['id':2,'name':'ج']

但是它没有给出这个输出。有人对此有想法吗?

1
我是唯一一个对为什么要将波斯字符的字符串特别称为“拉丁排序”感到困惑的人吗?我很确定波斯字符不是拉丁字符... - Jimbo Jonny
3个回答

1

首先,您需要更正数组。它的格式无效。

var a = [{'id':1,'name':'ب'},{'id':2,'name':'ج'},{'id':3,'name':'اما'}];

a.sort(function(a, b) {

  if (a.name > b.name) {

    return true;
  }
});
输入: [{'id':1,'name':'ب'},{'id':2,'name':'ج'},{'id':3,'name':'اما'}]

输出: [{'id':3,'name':'اما'},{'id':1,'name':'ب'},{'id':2,'name':'ج'}]

0
你可以使用 String#codePointAt 来获取一个字符的 Unicode 值。
arr.sort((a, b) => a.name.codePointAt(0) - b.name.codePointAt(0))

var arr = [{
    'id': 1,
    'name': 'ب'
}, {
    'id': 2,
    'name': 'ج'
}, {
    'id': 3,
    'name': 'اما'
}];

var sortedArr = arr.sort((a, b) => a.name.codePointAt(0) - b.name.codePointAt(0));

document.body.innerHTML = '<pre>' + JSON.stringify(sortedArr, 0, 4);

请注意,原始代码中的语法有误。请使用对象数组。

0
最好使用标准字符串函数localeCompare来比较非英语字符串:
var arr = [{'id':1,'name':'ب'},{'id':2,'name':'ج'},{'id':3,'name':'اما'}];
arr.sort(function(first, second ) {
    return first.name.localeCompare(second.name);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接