简体   繁体   中英

sort javascript array by object attribute

I want to sort my array by lastName attribute. 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)):

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 . So ca return that in this situation.

2) Array.sort sorts the given array in place. 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;
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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