Я хочу отсортировать свой массив по атрибуту lastName. Массив остается неизменным. Вот код:

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);

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]

Почему порядок объектов в массиве не меняется?

Полный метод, который находится внутри:

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);
        }
    }


}
0
BeniaminoBaggins 20 Авг 2014 в 08:18
2
Можете ли вы опубликовать содержимое массива.
 – 
Mritunjay
20 Авг 2014 в 08:19
Разве я этого не сделал? В console.log массива?
 – 
BeniaminoBaggins
20 Авг 2014 в 08:24
Нет, мы можем видеть только атрибуты одного предмета.
 – 
steveax
20 Авг 2014 в 08:25
Получил проблему добавил ответ.
 – 
Mritunjay
20 Авг 2014 в 08:29

1 ответ

Лучший ответ

В вашем коде есть две проблемы.

1) "OneString"-"SecondString" вернет NaN. Так что можно вернуть это в этой ситуации.

2) Array.sort сортирует заданный массив по месту. Возвращает отсортированный массив.

Скажи так

clientListArray.sort(function(a, b){
    if(a.lastName < b.lastName) return -1;
    if(a.lastName > b.lastName) return 1;
    return 0;
})
1
Mritunjay 3 Авг 2018 в 07:37
Согласно MDN «Метод sort () сортирует элементы массива на месте и возвращает массив». поэтому он возвращает массив.
 – 
AndrewHarvey
2 Авг 2018 в 07:50
Но вы говорите: «Он не возвращает массив». но MDN говорит, что возвращает массив.
 – 
AndrewHarvey
3 Авг 2018 в 05:40
My Bad, Обновил ответ. Хотя я не уверен, зачем вам сортировать массив на месте, а затем возвращать отсортированный массив обратно.
 – 
Mritunjay
3 Авг 2018 в 07:38