@Ellerow

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

Здравствуйте, возможно столкнулся с неким багом или просто не понимаю почему так. Есть задача:

У нас есть массив объектов, который нужно отсортировать:
let users = [
  { name: "John", age: 20, surname: "Johnson" },
  { name: "Pete", age: 18, surname: "Peterson" },
  { name: "Ann", age: 19, surname: "Hathaway" }
];

Напишите функцию byField, которая может быть использована для этого.
А вот решение:
let users = [
  { name: "John", age: 20, surname: "Johnson" },
  { name: "Pete", age: 18, surname: "Peterson" },
  { name: "Ann", age: 19, surname: "Hathaway" }
];

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

users.sort(byField('name'));
users.forEach(user => console.log(user.name)); // Ann, John, Pete

users.sort(byField('age'));
users.forEach(user => console.log(user.name)); // Pete, Ann, John

И вроде как всё правильно работает. Но если мы будем выводить сам массив объектов:
console.log(users)

users.sort(byField('name'));
users.forEach(user => console.log(user.name)); // Ann, John, Pete
console.log(users)

users.sort(byField('age'));
users.forEach(user => console.log(user.name)); // Pete, Ann, John
console.log(users)

5da98c47c50e1124841095.png
То при просмотре увидим, что он одинаков на всех этапах сортировок. В тоже время, он совпадает с последним отсортированным, массивом. Т.е. если мы наоборот, сначала отсортируем, по возрасту, а в конце по имени, то все выведенные массивы будут совпадать с отсортированным объектом по имени.
5da990b674787017178552.png
Если выводить свойства объектов по отдельности, то всё правильно.
И вот забавный факт, используя другой компилятор, всё нормально.
Почему так получается?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Консоль хрома при раскрытии объектов и массивов использует текущее значение в памяти, а не то, которое было на момент вывода в консоль.
Поэтому и
при просмотре увидим, что он одинаков на всех этапах сортировок. В тоже время, он совпадает с последним отсортированным, массивом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы