2015-10-09 1 views
0

j'ai 2 tableaux de tailles différentes comme celle-ci:opération Math avec deux tableaux de longueur différente en javascript

var array1 = [1, 2, 3, 4, 5, 6]; 
var array2 = [1, 2, 3]; 

Je voudrais faire ceci:

for (i = 0; i < array1.length; i++) { 
    console.log(array1[i]/array2[i]); 
} 

Que puis-je faire pour revenir au début de array2 quand array1.length> array2.length?

Afin d'avoir: 1/2 - 02/02 à 03/03 - 04/01 à 05/02 - 6-3

J'ai essayé de mettre 2 boucles, mais il ne fonctionne pas.

Répondre

1

Utilisez modulo pour enrouler autour de:

for(i=0; i< array1.length ; i++){ 
    console.log(array1[i]/array2[i % array2.length]); 
} 
0

Vous pouvez utiliser l'opérateur de module pour arrondir l'index du tableau. Le module % renverra le reste après la division, de sorte que l'utilisation de anyNumber % arrLen sera toujours inférieure à arrLen.

var array1 = [1, 2, 3, 4, 5, 6]; 
 
var array2 = [1, 2, 3]; 
 
var firstArrLen = array1.length, 
 
    secondArrayLen = array2.length; 
 

 
for (i = 0; i < Math.max(firstArrLen, secondArrayLen); i++) { 
 
    document.write('<pre>' + (array1[i % firstArrLen]/array2[i % secondArrayLen]) + '</pre>'); 
 
}

+0

'firstArrLen == array1.length'. 'i% firstArrLen == je suis toujours. – Amit

+0

@Amit Oui, cela est ajouté pour plus de flexibilité, vous pouvez échanger le 'array1' avec' array2' et cela fonctionnera toujours. – Tushar

+0

Utilisez au moins 'Math.max (firstArrLen, secondArrayLen)' dans la condition for. (Mais alors il ne sera pas vraiment compatible avec OP ...) – Amit

0

D'autres solutions bien faire le travail. Je peux proposer l'utilisation map pour le premier réseau pour faire le look de beau code:

var result = array1.map(function(e, i) { 
    return e + '/' + array2[i % array2.length]; 
}); 

console.log(result); // ["1/1", "2/2", "3/3", "4/1", "5/2", "6/3"] 

Remplacer la chaîne '/' avec / (opérateur de division) pour obtenir les valeurs réelles.

+0

Pourquoi passer par toute cette longueur? forcer des appels de fonction inutiles, allouer et remplir un tableau, GC ...? Cela aurait du sens s'il y avait un besoin de créer un nouveau tableau, mais comme ça? quoi que ce soit, '.forEach()', mais cela aussi est trop dans mon POV. – Amit

+0

@Amit Je suppose que l'OP veut utiliser les valeurs d'une façon ou d'une autre, non seulement pour les sortir sur la console. Si c'est le cas, cela peut valoir la peine d'utiliser un tableau pour les stocker, et 'map' pourrait être une bonne alternative à' array.push() 'et à tout autre truc. – VisioN