Почему не может прочитать свойство?

var users = [{
  name: "Вася",
  surname: 'Иванов',
  age: 20
}, {
  name: "Петя",
  surname: 'Чапаев',
  age: 25
}, {
  name: "Маша",
  surname: 'Медведева',
  age: 18
}];

function compare(a, b) {
	return function (field){
		return a[field] > b[field] ? 1 : -1;
	}
}
var byField = compare();

users.sort(byField('name'));
users.forEach(function(user) {
  alert( user.age );
});

В консоли показывается - "cannot read property 'name' of undefined". Почему и как исправить?
  • Вопрос задан
  • 256 просмотров
Решения вопроса 3
riky
@riky
Laravel
вот так
function compare(field){
  return function (a, b) {
    return a[field] > b[field] ? 1 : -1;
  }
}
var byName = compare('name');

users.sort(byName);
users.forEach(function(user) {
  alert( user.age );
});
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Что-то мне подсказывает, что функция compare написана неверно, надо так:
function createCompare(field) {
  return function (a, b){
    if(a[field] > b[field]) return 1;
    if(a[field] < b[field]) return -1;
    return 0;
  }
}

users.sort(createCompare('name'));


И изучите замыкания в js
Ответ написан
AMar4enko
@AMar4enko
Вы замыкание задом наперед сделали
function compare(field) {
  return function (a, b){
    return a[field] > b[field] ? 1 : -1;
  }
}
var byName = compare('name');

users.sort(byName);
users.forEach(function(user) {
  alert( user.age );
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
pm_wanderer
@pm_wanderer
junior-HTML
вы когда функцию вызываете, то параметры забываете отправить в нее.
Да и вообще что то не то тут. Функция sort у массива не может сортировать обьекты вроде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы