2

Ребят, не пойму в чем ошибка. Есть задача на всем известном сайте для изучения JS по организации сортировки объектов в массиве через замыкания. В общем не пойму, почему при обращении к свойству объекта через точку return a.field > b.field ? 1 : -1; сортировка работает не верно, а через скобки return a[field] > b[field] ? 1 : -1; верно, хотя название свойства в одно слово без пробелов.

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

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

users.sort(byField('name')); users.forEach(function(user) { alert( user.name ); }); // Вася, Маша, Петя

users.sort(byField('age')); users.forEach(function(user) { alert( user.name ); }); // Маша, Вася, Петя

  • где пример с демонстрацией проблемы то? у вас две сортировки по имени и по возрасту, судя по комментариям выводят правильно. проблема не понятна. – teran Jul 05 '19 at 18:08
  • У меня пример работает корректно. Все верно) Суть вопроса в тексте над кодом: если поставить вместо квадратных скобок точку - сортировка работать будет не верно. – Кафка Тамура Jul 05 '19 at 18:15

1 Answers1

2

Как я вижу field это аргумент функции, он имеет некое значение.

Так вот, когда Вы пишете a[field] Вы обращаетесь к полю, которое называется так, какое значение находится в переменной field т.е. например к полю "name", а когда пишете a.field Вы обращаетесь к полю под названием "field"