Применение Array.reducce с оператором расширения
Всем привет!Подскажите пож-та : изучаю метод Array.prototype.reduce. На сайте https://developer.mozilla.org/ru/doc...s/Array/Reduce есть предпоследний пример склеивание массивов, содержащихся в объектах массива, с использованием оператора расширения и initialValue Собственно вопрос:
Почему нельзя было обойтись без initial value в этом примере. Попробовал сделать так "return [...prev.books, ...curr.books]" и вылетает ошибка, что prev.books не итерррруется. // friends - список из объектов(друзей) // где поле "books" - список любимых книг друга var friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21 }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26 }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18 } ] // allbooks - список, который будет содержать все книги друзей + // дополнительный список указанный в initialValue var allbooks = friends.reduce(function(prev, curr) { return [[I]...prev[/I], ...curr.books]; }, ["Alphabet"]); // allbooks = ["Alphabet", "Bible", "Harry Potter", "War and peace", // "Romeo and Juliet", "The Lord of the Rings", "The Shining"] |
Понял, спасибо большое!
|
VyacheslavBozere,
потому что ваш ...prev будет первым объектом, а к ним spread применять нельзя, вот и вылетает ошибка. можете вместо ["Alphabet"] использовать пусто литерал массива |
Понял, огромное спасибо!
|
VyacheslavBozere,
строка 12 вернула массив у которого нет никаких books и на втором ходе получилась ошибка |
var friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21 }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26 }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18 } ] var allbooks = friends.reduce(function(prev, curr) { console.log(prev); console.log(...prev); // опа! return [...prev, ...curr.books]; }); |
j0hnik,
:-? |
рони, говорите
|
j0hnik,
код ваш поучительный, советы полезные, но зачем, вопрос был почему "return [...prev.books, ...curr.books]" не работает? |
VyacheslavBozere,
вариант без initialValue <script> // friends - список из объектов(друзей) // где поле "books" - список любимых книг друга var friends = [ { name: "Anna", books: ["Bible", "Harry Potter"], age: 21 }, { name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26 }, { name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18 } ] // allbooks - список, который будет содержать все книги друзей var allbooks = friends.reduce(function(prev, curr) { return [...(prev.books||prev), ...curr.books]; }); document.write(JSON.stringify(allbooks)) </script> |
Часовой пояс GMT +3, время: 16:19. |