Как вырезать первый элемент массива через Reduce?
Почему консоль лог возвращает ["Москва" ,"Смоленск"] Нужно из каждого массива удалить первый элемент и соединить их.
let list = [
['Иван', 'Москва', 'Питер', 'Нижний'],
['Петр', 'Можайск', 'Смоленск'],
['Саша', 'Москва', 'Смоленск']
];
let city = list.reduce((acc,val) => {
val.shift();
return val;
});
console.log(city);
Ответы (2 шт):
Нужно использовать map в данном случае.
И в данном случае лучше подойдет slice(1) чем shift, так как shift изменяет исходный массив
Для того чтобы преобразовать массив в "одномерный" можно воспользоваться методом flat()
let list = [
['Иван', 'Москва', 'Питер', 'Нижний'],
['Петр', 'Можайск', 'Смоленск'],
['Саша', 'Москва', 'Смоленск']
];
let city = list.map(val => val.slice(1)).flat(1)
console.log('city', city);
console.log('list', list);
Можете почитать как работает reduce:
Результатом метода .reduce, является значение, которое было возвращено на последней итерации.
В данном случае, это ['Саша', 'Москва', 'Смоленск'] без первого элемента, так как на каждой итерации, вместо аккумулятора возвращается значение текущего элемента
Вместо этого, необходимо было использовать acc, в котором содержится значение с предыдущей итерации.
Так как это массив - для объединения достаточно использовать метод .concat
let list = [
['Иван', 'Москва', 'Питер', 'Нижний'],
['Петр', 'Можайск', 'Смоленск'],
['Саша', 'Москва', 'Смоленск']
];
let city = list.reduce((acc, val) => {
return acc.concat(val.slice(1));
}, []);
console.log(city);
Альтернативным решением может быть использование метода .flatMap
let list = [
['Иван', 'Москва', 'Питер', 'Нижний'],
['Петр', 'Можайск', 'Смоленск'],
['Саша', 'Москва', 'Смоленск']
];
let city = list.flatMap((val) => val.slice(1));
console.log(city);