js задачка начинающего

есть строка '123456', нужно сделать из нее '214365'

let str = '123456'
str = str.split('')
for(let i = 0; i < str.length; i += 2) {
    str.splice(i, 0, str.splice(i+1, 1))
}
console.log(str)

почему этот код дает ответ не ["2", "1", "4", "3", "6", "5"] а [Array(1), "1", Array(1), "3", Array(1), "5"] то есть те значения которые нужны, но внутри собственных массивов?

p.s понятно что используя str.join('') я получу нужный ответ, тут суть вопроса почему? а не как?


Ответы (3 шт):

Автор решения: vsemozhebuty

Потому что вы превращаете строку в массив и применяете метод массива splice(), который возвращает уже не строку, а массив удалённых элементов.

→ Ссылка
Автор решения: Aziz Umarov

так попробуйте

let str = '123456'
str = str.split('')

for(let i = 0; i < str.length; i += 2) {
    str.splice(i, 0, str.splice(i+1, 1)[0])
}
console.log(str)
А всё потому что str.splice(i+1, 1) возвращает массив

array.splice(start, deleteCount[, item1[, item2[, ...]]])

Массив, содержащий удалённые элементы. Если будет удалён только один элемент, вернётся массив из одного элемента. Если никакие элементы не будут удалены, вернётся пустой массив.

Если воспользоваться идеей @wololo, чтоб не путаться в JS существует [a, b] = [b, a]; деструктивное присваивание

let str = '123456'
str = str.split('')

for(let i = 0; i < str.length; i += 2) {
  [str[i], str[i+1]] = [str[i+1], str[i]];
}

console.log(str);

→ Ссылка
Автор решения: Алекс
 function reverse(str){
let arr = str.split('');
let newArr = [];
for (let i = 1; i < arr.length; i +=2){
    newArr.push(arr[i] + arr[i - 1]);
}
return newArr.join('');
}

 console.log(reverse('123456'));
→ Ссылка