按字符串属性值对对象数组排序

有 JavaScript 对象数组:

var objs = [ 
    { first_nom: 'Lazslo', last_nom: 'Jamf'     },
    { first_nom: 'Pig',    last_nom: 'Bodine'   },
    { first_nom: 'Pirate', last_nom: 'Prentice' }];

如何根据 JavaScript 中last_nom的值对它们进行排序?
我知道 sort (a,b) ,但它似乎只对字符串和数字起作用。 是否需要向对象中添加 toString()?

4个回答

编写自己的比较函数非常简单:

function compare( a, b ) {
  if ( a.last_nom < b.last_nom ){
    return -1;
  }
  if ( a.last_nom > b.last_nom ){
    return 1;
  }
  return 0;}
objs.sort( compare );
或 inline (c / o Marco Demaio) :
objs.sort((a,b) => (a.last_nom > b.last_nom) ? 1 : ((b.last_nom > a.last_nom) ? -1 : 0));

在 es6 / es2015或更高版本中,可以这样做:
objs.sort((a, b) => a.last_nom.localeCompare(b.last_nom));

你也可以创建一个动态排序函数,根据你传递的值对对象进行排序:

function dynamicSort(property) {
    var sortOrder = 1;
    if(property[0] === "-") {
        sortOrder = -1;
        property = property.substr(1);
    }
    return function (a,b) {
        /* next line works with strings and numbers, 
         * and you may want to customize it to your needs
         */
        var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
        return result * sortOrder;
    }}

所以有类似这样的对象数组:

var People = [
    {Name: "Name", Surname: "Surname"},
    {Name:"AAA", Surname:"ZZZ"},
    {Name: "Name", Surname: "AAA"}];

会管用的
People.sort(dynamicSort("Name"));People.sort(dynamicSort("Surname"));People.sort(dynamicSort("-Surname"));

不理解为什么大家把事情弄得这么复杂:

objs.sort(function(a, b){
  return a.last_nom > b.last_nom;});

还不行?换这个:

objs.sort(function(a, b){
  return a.last_nom == b.last_nom ? 0 : +(a.last_nom > b.last_nom) || -1;});

将操作符交换为按反向字母顺序排序。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
jacascrup怎么对不同类型的字符串进行相加操作,字符串数组的相加怎么加?
4
怎么javascrpt语言实现将一个字符串转换为多个字符串构成的数组并且判断每个字符串的数组?
1
java程序设计(字符串排序)
1
c# 在命令行中输入任意10个字符串,根据字符串类型将输入的数据放入到不同数组中,最后将数组进行排序
1
C语言字符串的排序问题如何解决?
3
C#如何把带小数点的字符串转化为字节数组,并且把每一位分割为单字节发送?
2
从txt读入字符串然后转换为字符数组(debug小问题)
1
用指针数组 对字符串排序,怎么实现?
3
Android一串字符串怎么转换成16进制数组
1
c#string字符串转存为byte[]数组
4
安卓将json数据转换成对象,可是对象属性值为空,是为什么?
2
C语法问题,二维字符串数组,无下标
1
java中对象数组格式的字符串如何转换成数组?
1
输入一个字符串,可以删除字符串s中的任意字符,剩下的字符串形成对称字符串,且该字符串为最长对称字符串
2
javascript排序字符串中的数值
2
指定位置输出字符串:输入一个字符串后再输入两个字符,输出此字符串中从与第一个字
2
字符串转json数组,及json的value值为数组格式丢失问题
1
mysql 字符串排序问题
0
c语言如何读取文本文件中指定的字符串并保存到字符串数组中?
7
如何在 Java 中分割字符串?