2017-10-12 6 views
0

Je dois insérer un nouveau membre dans le tableau Javascript après chaque nième membre. Si j'essaie d'effectuer une itération sur un tableau et que j'insère de nouveaux membres avec array.splice(), cela ne fonctionne pas car tout type de boucle d'itération dépend de la longueur du tableau, qui change à chaque itération. Par exemple, j'ai tableau comme:Javascript: insérer un nouveau membre de tableau après chaque nième membre

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

et que vous souhaitez le faire comme:

[1, 2, 'insert this', 3, 4, 'insert this', 5, 6, 'insert this', 7, 8, 'insert this', 9, 10, 'insert this'] 

Si je tente le code ci-dessous, je me retrouve avec un tableau vide:

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
for (var itemIndex = 2; itemIndex < dataRow.length; itemIndex += 2) { 
    dataRow.splice(itemIndex, 0, 'insert this'); 
} 

Cette question n'est pas un doublon de questions où les gens voulaient juste obtenir membre de tableau ou de l'insérer à un poste particulier. Le problème est, comment le faire à chaque nième position.

+1

Au lieu de le muter le tableau réel, vous pouvez générer une nouvelle de lui – Faly

Répondre

1

Il suffit de changer votre code pour cela. Ajoutez 3 à itemIndex pour représenter 1 insertion également.

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 
for (var itemIndex = 2; itemIndex < dataRow.length; itemIndex += 3) { 
 
    
 
    dataRow.splice(itemIndex, 0, 'insert this'); 
 
} 
 

 
console.log(dataRow);

+0

C'est, merci – cincplug

1

Vous pouvez itérer de la fin et de l'éclisse l'élément supplémentaire.

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 
for (var itemIndex = Math.floor(dataRow.length/2) * 2; itemIndex > 0; itemIndex -= 2) { 
 
    dataRow.splice(itemIndex, 0, 'insert this'); 
 
} 
 

 
console.log(dataRow);

1

var dataRow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 
var length = dataRow.length; 
 
for (var i = 1; i <= length/2; i++) { 
 
    dataRow.splice(i * 3 - 1, 0, 'insert this'); 
 
} 
 
console.log(dataRow);

espère que cela fonctionne!