Je veux additionner chaque valeur d'un tableau de nombres avec sa valeur correspondante dans un tableau de nombres différent, et je veux le faire sans avoir à parcourir chaque valeur individuellement.
Alors:
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = [6,8,10,12];
Mais j'aimerais bien le faire d'un seul coup, au lieu de faire ceci:
for(var i = 0; i < array1.length; i++){
sum.Push(array1[i] + array2[i]);
}
Quelqu'un peut-il penser à un moyen? Je suis assez perplexe.
Je sais que c'est une vieille question, mais j'en discutais avec quelqu'un et nous avons proposé une autre solution. Vous avez toujours besoin d'une boucle, mais vous pouvez le faire avec Array.prototype.map ().
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = array1.map(function (num, idx) {
return num + array2[idx];
}); // [6,8,10,12]
var arr = [1,2,3,4];
var arr2 = [1,1,1,2];
var squares = arr.map((a, i) => a + arr2[i]);
console.log(squares);
Il suffit de fusionner la réponse de Popovich et celle de twalters.
Array.prototype.SumArray = function (arr) {
var sum = this.map(function (num, idx) {
return num + arr[idx];
});
return sum;
}
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = array1.SumArray(array2);
console.log(sum); // [6,8,10,12]
Vous ne pouvez pas éviter la boucle, mais vous pouvez le faire une fois et ajouter une fonction à tous les objets Array à l'aide de Array.prototype
.
Voici et exemple:
// Add a SumArray method to all arrays by expanding the Array prototype(do this once in a general place)
Array.prototype.SumArray = function (arr) {
var sum = [];
if (arr != null && this.length == arr.length) {
for (var i = 0; i < arr.length; i++) {
sum.Push(this[i] + arr[i]);
}
}
return sum;
}
// here's your code
var array1 = [1, 2, 3, 4];
var array2 = [5, 6, 7, 8];
var sum = array1.SumArray(array2);
console.log(sum); // [6,8,10,12]
Voici votre Fiddle .
L'exemple ci-dessous fonctionnera même avec des variations de longueur et quelques cas d'utilisation supplémentaires. check-out. vous pouvez aussi faire du prototypage si vous en aviez besoin.
function sumArray(a, b) {
var c = [];
for (var i = 0; i < Math.max(a.length, b.length); i++) {
c.Push((a[i] || 0) + (b[i] || 0));
}
return c;
}
// First Use Case.
var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4];
console.log( sumArray(a, b) );
// Second Use Case with different Length.
var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4, 5];
console.log( sumArray(a, b) );
// Third Use Case with undefined values and invalid length.
var a = [1, 2, 3, 4];
var b = [];
b[1] = 2;
b[3] = 4;
b[9] = 9;
console.log( sumArray(a, b) );
Vous pouvez utiliser la méthode _.unzipWith
de la bibliothèque Lodash.
var array1 = [1, 2, 3, 4];
var array2 = [5, 6, 7, 8];
var array = [array1, array2];
console.log(_.unzipWith(array, _.add));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
Vous pouvez le faire en utilisant un style fonctionnel:
const a = [1,2,3]
const b = [4,5,6]
const f= a.concat(b).map((v,i,arr)=>{
if ( i<arr.length) return v+arr[i+arr.length/2]
}).filter(n=>!isNaN(n))
console.log(f)
Cet exemple fonctionnera avec une variation de longueur différente:
let getSum = (arr1, arr2) => {
let main = arr1.length >= arr2.length ? arr1 : arr2;
let sec = arr1.length < arr2.length ? arr1 : arr2;
return main.map((elem, i) => sec[i] ? elem + sec[i] : elem)
}