简体   繁体   English

按对象属性对javascript数组排序

[英]sort javascript array by object attribute

I want to sort my array by lastName attribute. 我想按lastName属性对数组进行排序。 The array stays exactly the same. 数组保持完全相同。 Here is the code: 这是代码:

console.log(clientListArray);
    //sort clientList by last name
    var sortedtClientListArray = clientListArray.sort(function(obj1, obj2) {
        console.log(obj1.lastName);
        return obj1.lastName - obj2.lastName;
    })
    console.log(sortedtClientListArray);

A console.log of my array that stays the same (diving in to the 4th element (index 3)): 我的数组的console.log保持不变(分为第4个元素(索引3)):

0: ct.extend.init
1: ct.extend.init
2: ct.extend.init
3: ct.extend.init
_events: Object
dwelling: "RH07"
firstName: "Alan"
lastName: "Mosby"
letter: "M"
nhi: ""
oid: "2143.10"
parent: function (){return i}
uid: "79fbbf40-5545-4cdc-bc2b-088bf56affc6"
__proto__: r
4: ct.extend.init
5: ct.extend.init
6: ct.extend.init
7: ct.extend.init
length: 8
__proto__: Array[0]

Why is the order of objects in the array not changing? 为什么数组中对象的顺序没有变化?

The full method that it is inside: 它里面的完整方法是:

function onClientClick(e) {


    console.log(e.dataItem);
    var clientList = e.sender.dataSource._data;
    console.log(clientList);
    var clientListArray = [];
    for(i=0; i < clientList.length; i++){
        clientListArray.push(clientList[i]);
    }
    console.log(clientListArray);
    //sort clientList by last name
    var sortedtClientListArray = clientListArray.sort(function(obj1, obj2) {
        console.log(obj1.lastName);
        return obj1.lastName - obj2.lastName;
    })
    console.log(sortedtClientListArray);

    for(i=0; i < clientList.length; i++){
        var clientID = clientList[i].oid;
        if(clientID == e.dataItem.oid) {
            theClient = new Client(clientList[i]);
            console.log(i);
            console.log(theClient.name);
            navigateToSingleClient(true, clientList[i], true, clientList, i);
        }
    }


}

There are two problems in your code. 您的代码中有两个问题。

1) "OneString"-"SecondString" will return NaN . 1) "OneString"-"SecondString"将返回NaN So ca return that in this situation. 因此,在这种情况下,ca可以将其退回。

2) Array.sort sorts the given array in place. 2) Array.sort对给定的数组进行排序。 It returns the sorted array. 它返回排序后的数组。

Say like this 这样说

clientListArray.sort(function(a, b){
    if(a.lastName < b.lastName) return -1;
    if(a.lastName > b.lastName) return 1;
    return 0;
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM