Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вставить символ после каждого символа в массиве (https://javascript.ru/forum/misc/84116-vstavit-simvol-posle-kazhdogo-simvola-v-massive.html)

NovichokJS 05.06.2022 11:42

Вставить символ после каждого символа в массиве
 
Нужно поместить 1 после каждого элемента массива :

[2, 5, 3, 5, 9]; // Output [2, 1, 5, 1, 3, 1, 5, 1, 9, 1];


У меня получилось так, что элементы в скобках:

let arr = [2, 5, 3, 5, 9, 5];
let str = arr.join(1);
let arrRes = str.split('');
console.log(arrRes); // [ '2', '1', '5', '1', '3', '1', '5', '1', '9', '1', '5' ]


1). Как сделать чтобы вернулся массив чисел без скобок?
2). Можно ли сделать чтобы сразу в текущий массив поместить 1 после каждого элемента не используя превращение в строку, потом снова в массив...?

рони 05.06.2022 11:57

NovichokJS,
let arr = [2, 5, 3, 5, 9, 5];
arr = arr.map(a => [a, 1]).flat();
console.log(arr)

NovichokJS 05.06.2022 12:06

Цитата:

Сообщение от рони (Сообщение 545937)
NovichokJS,
let arr = [2, 5, 3, 5, 9, 5];
arr = arr.map(a => [a, 1]).flat();
console.log(arr)

ага...точно..понятно. А по поводу вопроса 1) - как превратить?

Alexandroppolus 05.06.2022 12:06

1) создание нового массива
function inserts(arr, value) {
    const r = [];
    for (let i = 0; i < arr.length; ++i) {
        r.push(arr[i], value);
    }
    return r;
}

alert(JSON.stringify(inserts([2, 3, 4, 5], 1)));


2) изменение переданного массива
function insertsInPlace(arr, value) {
    const len = arr.length;
    for (let i = 0; i < len; ++i) {
        arr.push(value);
    }
    for (let i = len - 1; i > 0; --i) {
        const t = arr[i];
        arr[i] = arr[2*i];
        arr[2*i] = t;
    }
    return arr;
}

const arr = [2, 3, 4, 5];
insertsInPlace(arr, 1);
alert(JSON.stringify(arr));

рони 05.06.2022 12:09

Цитата:

Сообщение от NovichokJS
А по поводу вопроса 1) -

arr = arr.map(a => +a)

NovichokJS 05.06.2022 12:16

Всем спасибо!

рони 05.06.2022 13:35

:)
function insertsInPlace(arr, value) {
            const len = arr.length;
            for (let i = len - 1, k = 2 * i; i >= 0; --i, k -= 2) {
                arr[k] = arr[i];
                arr[k + 1] = value;
            }
            return arr;
        }

        const arr = [2, 3, 4, 5];
        insertsInPlace(arr, 1);
        alert(JSON.stringify(arr));

Alexandroppolus 05.06.2022 14:45

рони,
можно arr[k + 1] = value;, а в цикле k -= 2, а то с тройкой немного сбивает с толку

правда, во время работы цикла будет "массив с дырками", это может приводить к деоптимизациям, насколько я знаю..

рони 05.06.2022 16:48

Цитата:

Сообщение от Alexandroppolus
k -= 2,

ок! :)


Часовой пояс GMT +3, время: 10:20.