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 шт):
Потому что вы превращаете строку в массив и применяете метод массива splice(), который возвращает уже не строку, а массив удалённых элементов.
так попробуйте
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)
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'));