Копирование с помощью spread
filter() и map() создают новые массивы, а sort() изменяет сам массив. Иногда это проблема, потому что исходный порядок теряется:
const temperatures = [18, 23, 25, 19, 22];
const sorted = temperatures.sort((a, b) => a - b);
console.log(sorted);
console.log(temperatures);[18, 19, 22, 23, 25]
[18, 19, 22, 23, 25]sort() возвращает массив, который он отсортировал: тот же самый массив, а не новый. sorted и temperatures — два имени одного массива, и вы уже не можете сказать, в какой день какая была температура. Чтобы сохранить оригинал, отсортируйте копию. Копию делают с помощью трёх точек, которые называются spread (оператор расширения): [...temperatures] — это новый массив со всеми элементами temperatures.
const temperatures = [18, 23, 25, 19, 22];
const sorted = [...temperatures].sort((a, b) => a - b);
console.log(sorted);
console.log(temperatures);[18, 19, 22, 23, 25]
[18, 23, 25, 19, 22]Теперь sort() сортирует только копию. С помощью spread можно ещё собрать несколько массивов в один, например животных, которых покормили утром, и тех, которых покормили днём, и добавить другие элементы рядом с ними:
const morning = ["Бим", "Лео"];
const afternoon = ["Гоша", "Пип"];
const fedToday = [...morning, ...afternoon, "Макс"];
console.log(fedToday);["Бим", "Лео", "Гоша", "Пип", "Макс"]Три точки работают и с объектами, в фигурных скобках. { ...leo } — это копия объекта leo, а свойства, которые вы пишете после неё, изменяют копию, а не оригинал:
const leo = { name: "Лео", species: "лев", age: 6 };
const olderLeo = { ...leo, age: 7 };
console.log(olderLeo);
console.log(leo);{ name: "Лео", species: "лев", age: 7 }
{ name: "Лео", species: "лев", age: 6 }Типичная ошибка — копировать через =. const copy = temperatures; не создаёт нового массива, а лишь даёт тому же массиву второе имя. Поэтому copy.sort() сортирует и temperatures тоже. С объектами то же самое.
Задание
- 1
Создайте константу
bothWeeksс помощью spread: температуры прошлой недели, а за ними температуры этой недели, в одном массиве. Выведите её:[18, 21, 24, 19, 23, 17, 9, 25, 16, 20]. - 2
Создайте
sorted— отсортированную копиюbothWeeks, от самой низкой температуры. Затем выведите самую низкую и самую высокую температуру:Минимум: 9иМаксимум: 25. - 3
Ниже выведите
bothWeeksещё раз. Его температуры по-прежнему должны идти в порядке дней, как в первой строке.