排序非拉丁字符串不起作用

时间:2016-04-28 06:42:11

标签: javascript underscore.js

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

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

排序后输出应该是这样的:

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

但它没有给出这个输出。有没有人对此有所了解?

3 个答案:

答案 0 :(得分: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':'ج'}]

答案 1 :(得分: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);
&#13;
&#13;
&#13;

请注意OP代码中的语法错误。使用对象数组。

答案 2 :(得分:0)

最好使用标准字符串函数localeCompare来比较非英语字符串:

var arr = [{'id':1,'name':'ب'},{'id':2,'name':'ج'},{'id':3,'name':'اما'}];
arr.sort(function(first, second ) {
    return first.name.localeCompare(second.name);
});