Я пытаюсь получить следующую функцию сравнения 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);
Похоже на изменение 'var teContainer = {};' на 'var teContainer = [];' будет простым исправлением. – heartyporridge
@analytalica не очень. Он назначает «PersonId» в качестве индекса. Мы не знаем, каковы эти значения, или это может повлиять на сортировку. – Joseph
Спасибо за такой быстрый ответ. Я попробую ответить @ analytalica и посмотрю, может ли меняться объект в массив без ключа PersonID, который я могу сортировать. –