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!
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);
Autrement:
var a = ['a', 'b', 'c'],
b;
b = a.reduce((arr, b) => [...arr, b, 0], []);
console.log(b);
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)
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));
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)
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);
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)));
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'));
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);
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));
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);