TransWikia.com

Почему функция sort всплывает при console.log()

Stack Overflow на русском Asked on December 7, 2021

let products = [
  { title: "prod1", price: 5.2 },
  { title: "prod2", price: 0.18 },
  { title: "prod3", price: 15 },
  { title: "prod4", price: 25 },
  { title: "prod5", price: 18.9 },
  { title: "prod6", price: 8 },
  { title: "prod7", price: 19 },
  { title: "prod8", price: 63 },
];

console.log(filterCollection(products, 15, 30));

function filterCollection(array, min, max) {
  let newArr = array.filter((item) => {
    return item.price >= min && item.price <= max;
  });

  console.log(`Before sort:`);
  console.log(newArr);

  return newArr.sort((prev, next) => {
    return prev.price - next.price;
  });
}

В результате выполнения этого кода получаю следующий вывод
Вывод

Почему в результате меняется и первый console.log, если я ещё не осуществлял сортировку во время его вывода? Так во всех подобных ситуациях и только при сортировке массива объектов.

2 Answers

Вы выводите массив через ссылку на него, и консоль автоматически меняет то, что вы видите, при изменении массива по этой ссылке.
Метод sort() сортирует массив на месте, то есть, хоть он и возвращает новый массив, но перезапись идёт в старом - в данном случае, в newArr, который ранее был выведен в консоль.
Если хотите вывести предварительное значение newArr, надо выводить по новой ссылке - то есть, скопировать массив.

console.log([...newArr]);

Answered by artomich on December 7, 2021

Вызов arr.sort() сортирует массив на месте, меняя в нём порядок элементов.

Он возвращает отсортированный массив, но обычно возвращаемое значение игнорируется, так как изменяется сам arr.

Answered by Redmixes on December 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP