Как вставить новый элемент между всеми элементами массива JS?

У меня есть массив [a, b, c]. Я хочу иметь возможность вставлять значение между каждым элементом этого массива следующим образом: [0, a, 0, b, 0, c, 0].

Я предполагаю, что это будет что-то вроде этого, но я не могу заставить его работать.

for (let i = 0; i < array.length; i++) {
    newArray = [
        ...array.splice(0, i),
        0,
        ...array.splice(i, array.length),
    ];
}

Спасибо, что помогли мне!

Ответ 1

Для получения нового массива вы можете выполнить часть добавления элемента нуль для каждого элемента.

var array = ['a', 'b', 'c'],
    result = array.reduce((r, a) => r.concat(a, 0), [0]);
    
console.log(result);

Ответ 2

Другой способ:

var a = ['a', 'b', 'c'],
  b;

b = a.reduce((arr, b) => [...arr, b, 0], []);

console.log(b);

Ответ 3

Вы можете использовать .reduce():

function intersperse(arr, val) {
  return arr.reduce((acc, next) => {
    acc.push(next);
    acc.push(val);
    return acc;
  }, [val]);
}

console.log(intersperse(['a', 'b', 'c'], 0));

Ответ 4

Вы можете использовать map() с синтаксисом распространения ES6 и concat()

var arr = ['a', 'b', 'c']
var newArr = [0].concat(...arr.map(e => [e, 0]))

console.log(newArr)

Ответ 5

Другой способ, если вы хотите исключить начало и конец массива:

var arr = ['a', 'b', 'c']
var newArr = [...arr].map((e, i) => i < arr.length - 1 ? [e, 0] : [e]).reduce((a, b) => a.concat(b))

console.log(newArr)

Ответ 6

Вы могли бы сделать

let arr = ['a', 'b', 'c'];

arr = arr.reduce((a, b) => {
    a.push(0);
    a.push(b);
    return a;
}, []);
arr.push(0);
console.log(arr);

Ответ 7

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

Вот как должен выглядеть ваш код:

var arr = ['a', 'b', 'c'];
var results = [];
arr.forEach(function(el, index) {
  results.push(addition);
  results.push(el);
  if (index === arr.length - 1)
        results.push(addition);
});

Demo:

Это демонстрационный фрагмент:

var arr = ['a', 'b', 'c'];
var results = [];
var addition = 0;
arr.forEach(function(el, index) {
  results.push(addition);
  results.push(el);
  if(index === arr.length -1)
        results.push(addition);
});
console.log(results);

Ответ 8

function insert(arr, elm) {
  var newArr = [];
  for(var i = 0; i < arr.length; i++) {   // for each element in the array arr
    newArr.push(elm);                     // add the new element to newArr
    newArr.push(arr[i]);                  // add the current element from arr
  }
  newArr.push(elm);                       // finally add the new element to the end of newArr
  return newArr;
}

console.log(insert(["a", "b", "c"], 0));

Ответ 9

Это можно сделать с помощью строк путем разделения и объединения.

var arr = ['a', 'b', 'c'];
var newArray = ("0," + arr.toString().split(",").join(",0,")).split(",");
console.log(newArray);

Ответ 10

Это выглядит как межсегментный алгоритм, но делает некоторое дополнение к голове и хвосту. Поэтому я называю это extrasperse.

var arr         = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    extrasperse = (x,a) => a.reduce((p,c,i) => (p[2*i+1] = c, p), Array(2*a.length+1).fill(x));

console.log(JSON.stringify(extrasperse("X",arr)));

Ответ 11

let arr = ['a', 'b', 'c'];

function insert(items, separator) {
  const result = items.reduce(
    (res, el) => [...res, el, separator], [separator]);
  return result;
}

console.log(insert(arr, '0'));