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, если я ещё не осуществлял сортировку во время его вывода? Так во всех подобных ситуациях и только при сортировке массива объектов.
Вы выводите массив через ссылку на него, и консоль автоматически меняет то, что вы видите, при изменении массива по этой ссылке.
Метод sort()
сортирует массив на месте, то есть, хоть он и возвращает новый массив, но перезапись идёт в старом - в данном случае, в newArr
, который ранее был выведен в консоль.
Если хотите вывести предварительное значение newArr, надо выводить по новой ссылке - то есть, скопировать массив.
console.log([...newArr]);
Answered by artomich on December 7, 2021
Вызов arr.sort()
сортирует массив на месте, меняя в нём порядок элементов.
Он возвращает отсортированный массив, но обычно возвращаемое значение игнорируется, так как изменяется сам arr
.
Answered by Redmixes on December 7, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP