2015-08-12 2 views
1

Я пытаюсь получить следующую функцию сравнения JavaScript для массива, который содержит объекты (keyed), но приведенный ниже код не работает.Функция сопоставления JavaScript для сортировки не была вызвана

Я пробовал много примеров в Интернете (меняя их в соответствии с моими потребностями), но пока ничего хорошего.

См. Ниже код. Что я делаю не так?

Спасибо за ваше время.

(В качестве FYI, объект teContainer ниже прибудете заполнен через вызов AJAX)

var teContainer = {}; 
for (var i = 0; i < result.d.length; i++) { 
    var key = result.d[i].PersonId; 
    teContainer[key] = { 
     displayText: result.d[i].DLSPersonId + ' ' + result.d[i].PersonLastName + ', ' + result.d[i].PersonFirstName.substring(0, 5), 
     tEFirstName: result.d[i].PersonFirstName, 
     tELastName: result.d[i].PersonLastName, 
     tEID: result.d[i].PersonId, 
     orgID: result.d[i].DLS_OrgId 
    }; 
} 
function tECompare(a, b) { 
    if (a.tELastName < b.tELastName) 
     return -1; 
    if (a.tELastName > b.tELastName) 
     return 1; 
    return 0; 
} 
teContainer.sort(tECompare); 

Edit: Благодаря ответу; вот исправленный код, который работает:

var teContainer = []; 
for (var i = 0; i < result.d.length; i++) { 
    teContainer.push = ({ 
     displayText: result.d[i].DLSPersonId + ' ' + result.d[i].PersonLastName + ', ' + result.d[i].PersonFirstName.substring(0, 5), 
     tEFirstName: result.d[i].PersonFirstName, 
     tELastName: result.d[i].PersonLastName, 
     tEID: result.d[i].PersonId, 
     orgID: result.d[i].DLS_OrgId 
    }); 
} 
function tECompare(a, b) { 
    if (a.tELastName < b.tELastName) 
     return -1; 
    if (a.tELastName > b.tELastName) 
     return 1; 
    return 0; 
} 
teContainer.sort(tECompare); 

ответ

4

Это не работает, потому что sort это не метод объекта. teContainer - это объект, а не массив. Вероятно, вы получаете следующую ошибку:

Calling undefined method "sort" 
+1

Похоже на изменение 'var teContainer = {};' на 'var teContainer = [];' будет простым исправлением. – heartyporridge

+2

@analytalica не очень. Он назначает «PersonId» в качестве индекса. Мы не знаем, каковы эти значения, или это может повлиять на сортировку. – Joseph

+0

Спасибо за такой быстрый ответ. Я попробую ответить @ analytalica и посмотрю, может ли меняться объект в массив без ключа PersonID, который я могу сортировать. –

0

В общем, ваш код хорош. Главное в сортировке - это то, что функция «sort» работает только с Array, а не с Object.

Предполагая результат Ajax в формат:

var result = { 
    d: [ 
    { 
     PersonId: 1, 
     DLSPersonId: 1, 
     PersonLastName: "Doe", 
     PersonFirstName: "John", 
     DLS_OrgId: 1 
    }, 
    { 
     PersonId: 2, 
     DLSPersonId: 2, 
     PersonLastName: "Smith", 
     PersonFirstName: "Alex", 
     DLS_OrgId: 2 
    }, 
    { 
     PersonId: 3, 
     DLSPersonId: 3, 
     PersonLastName: "Vera", 
     PersonFirstName: "Luis", 
     DLS_OrgId: 3 
    } 
    ] 
}; 

Вот demo

* В демке я Жду, т chnage вашего объекта teContainer в случае, если вам это нужно, как есть.

Смежные вопросы