web-dev-qa-db-fra.com

Comment insérer un nouvel élément entre tous les éléments d'un tableau JS?

J'ai un tableau [a, b, c]. Je veux pouvoir insérer une valeur entre chaque élément de ce tableau comme ceci: [0, a, 0, b, 0, c, 0].

Je suppose que ce serait quelque chose comme ça, mais je ne peux pas le faire fonctionner.

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

Merci de m'aider!

16
Philippe

Pour obtenir un nouveau tableau, vous pouvez concatter la partie et ajouter un élément nul pour chaque élément.

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

Utiliser le même tableau

var array = ['a', 'b', 'c'],
    i = 0;

while (i <= array.length) {
    array.splice(i, 0, 0);
    i += 2;
}

console.log(array);

Un peu plus court avec itération de la fin.

var array = ['a', 'b', 'c'],
    i = array.length;

do {
    array.splice(i, 0, 0);
} while (i--)

console.log(array);

13
Nina Scholz

Autrement:

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

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

console.log(b);

4
Pako Navarro

Vous pouvez utiliser map() avec la syntaxe d'ES6 et concat()

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

console.log(newArr)

2
Nenad Vracar

Vous pouvez utiliser .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));

Ou pour ce faire en modifiant le tableau d'origine:

function intersperse(arr, val) {
  for (let i = 0; i <= arr.length; i += 2) {
    arr.splice(i, 0, val);
  }

  return arr;
}

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

2
JLRishe

Si vous souhaitez exclure le début et la fin d'un tableau, vous pouvez également:

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)

2
Vincent Menant

Vous pourriez faire 

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

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

0
marvel308

Cela ressemble à l’algorithme intersperse mais ajoute quelques ajouts à la tête et à la queue. Je l’appelle donc 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)));

0
Redu

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'));

0
Yangshun Tay

Vous devez simplement parcourir les éléments du tableau et ajouter le nouvel élément à chaque itération. Si vous atteignez la dernière itération, ajoutez le nouvel élément après le dernier élément.

Voici comment devrait être votre code:

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);
});

Démo:

Ceci est un extrait de démo:

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);

0
cнŝdk

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));

0
ibrahim mahrir

Cela pourrait être fait avec des chaînes en scindant et en joignant. 

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

0
Cody Fortenberry