13
votes

JavaScript: multiplier et somme deux tableaux

J'ai deux matrices de longueur égale et j'ai besoin de multiplier les valeurs correspondantes (par index) dans chacune, et résumez les résultats.

Par exemple P>

var arr1 = [2,3,4,5];
var arr2 = [4,3,3,1];


4 commentaires

Tellement bizzare! Toutes ces réponses ont été affichées en même temps, il n'ya donc aucun moyen que nous avons vu les réponses de l'autre de toilette ... Regardez le nom de la variable que nous avons choisi pour ... LOOP - Tout le monde a choisi i . Creepy, hein?


Quatre résultats, tous essentiellement identiques ... qui à uppote? : P


@Reid upvote ma version récursive, même si je ne le ferais jamais de cette façon pour ce problème particulier dans JS, c'est différent!


J'ai suscité les réponses de tous les autres! :)


16 Réponses :


13
votes
var sum = 0;
for(var i=0; i< arr1.length; i++) {
    sum += arr1[i]*arr2[i];
}

1 commentaires

La deuxième ligne peut également être écrite comme pour (var i = 0; i



2
votes

quelque chose comme ceci: xxx


0 commentaires

4
votes
var arr1 = [2,3,4,5];
var arr2 = [4,3,3,1];


var result = 0;
for (var i=0; i < arr1.length; i++) {
  result += (arr1[i] * arr2[i]);
}

alert(result);
Try it here: http://jsfiddle.net/VQKPt/

1 commentaires

Quiconque est descendant toutes ces réponses correctes doit cesser et expliquer leur raison. Ou juste arrêter.



3
votes
var i, result = 0;
for(i = 0; i < arr1.length; i++)
    result += arr1[i]*arr2[i];
alert(result);
Not that this will cause an error if arr2 is shorter than arr1, but you said they're equal length, so I didn't bother checking for it.

0 commentaires

3
votes

Mon vote pour une façon la plus simple à lire pour écrire cela va à l'humble pour la boucle: xxx


0 commentaires

2
votes

Cela semble assez simple vers moi xxx


0 commentaires

5
votes

D'autres réponses sont presque certainement plus efficaces, mais simplement pour vous donner un point de vue récursif (c'est plus agréable dans d'autres langues). Il suppose que les deux tableaux sont de longueur égale car vous ne spécifiez pas quoi faire s'ils ne sont pas.

function sumProducts(array1, array2) {
    if(array1.length) 
        return array1.pop() * array2.pop() + sumProducts(array1, array2);

    return 0;
}


0 commentaires

7
votes
var a = [1,2,3,4,5];
var b = [5,4,3,2,1];

a.map(function(x, index){ //here x = a[index]
 return b[index] + x 
});

=>[6,6,6,6,6]

//if you want to add the elements of an array:

a.reduce(function(x, y){
 return x + y
});

=>15
You can read about Array.map here.
and Array.reduce here

0 commentaires

19
votes
var arr1 = [2,3,4,5];
var arr2 = [4,3,3,1];
console.log(arr1.reduce(function(r,a,i){return r+a*arr2[i]},0));
34
This shows the "functional" approach rather than the "imperative" approach for calculating the dot product of two vectors.  Functional approach (which tends to be more concise) is preferred in such a simple function implementation as requested by the OP.

1 commentaires

S'il vous plaît expliquer pourquoi cela aide l'OP



1
votes

Déclarer des fonctions qui effectuent les opérations que vous souhaitez.

/**
* Divide each number of an array of numbers by another array of numbers
* @param  {Array}    arrayA  The array of numbers
* @param  {Array}    arrayB  The array of numbers
* @param  {Function} fn      Function that performs an operation
* @return {Array}            The resulting array
* @author Victor N. www.vitim.us
*/
function operateArrays(arrayA, arrayB, fn){
    if(arrayA.length!==arrayB.length) throw new Error("Cannot operate arrays of different lengths");
    return arrayB.map(function(b, i){
        return fn(arrayA[i], b);
    });
}


0 commentaires

1
votes
var squares = arr.map((a, i) => a + arr2[i]).reduce((t,n) => t+n);

console.log(squares);

2 commentaires

S'il n'y a pas de multiplication, comment cela résoudra-t-il le problème?


En fait, j'ai testé cela en utilisant la fonction Sumproduct Excels, puis l'a fait à la main pour confirmer, la réponse est de 14 dans votre exemple, mais JavaScript retourne 15



1
votes

Une solution à une seule ligne utilisant ES6 .ReRuce ():

const sum_products = arr1.reduce ((somme, val, i) => somme + (val * arrate [i]), 0)


0 commentaires

2
votes
function mul (arr1, arr2) {
    var n_array = (arr1,arr2).map(x => x * x)
    return n_array
    }
var a = [1,2,3]
var b = [1,2,3]
console.log(mul(a,b))

0 commentaires

1
votes

Voici 3 fonctions qui accomplissent toutes la même chose. Ils sont énumérés dans l'ordre de la syntaxe JavaScript de plus en plus moderne.

La première fonction utilise des fonctionnalités de langue de base qui sont autour depuis le début. Cela fonctionnera sur des navigateurs vraiment anciens tels que IE6. P>

La deuxième fonction utilise des fonctionnalités d'ECMasscript 5 qui a été introduite vers 2009 et fonctionnera sur IE9 +. P>

La troisième fonction utilise Ecmasscript Fonctions de flèche 2015 et ne fonctionnera pas sur une version d'IE, pas même à cree 11 que si vous n'utilisez pas un type d'étape de construction dans votre code pour transpirer jusqu'à ES5 comme Babel ou dossier P>

/**
 * Multiplies the corresponding values of two arrays and then sums the product.
 * Supported in all legacy browsers
 * @param {number[]} arr1 The first array
 * @param {number[]} arr2 The second array
 **/
function sumOfProductsECMAScript4(arr1, arr2) {
    var total = 0;
    for(var i = 0; i < arr1.length; i += 1) {
        total += arr1[i] * arr2[i];
    }
}

/**
 * Multiplies the corresponding values of two arrays and then sums the product.
 * Supported in all mainstream browsers except IE 8 and older.
 * @param {number[]} arr1 The first array
 * @param {number[]} arr2 The second array
 **/
function sumOfProductsECMASScript5(arr1, arr2) {
    // The map function creates a new array of the product of arr1 and arr2 values
    // The reduce function then takes this array of products and adds up all the values
    return arr1
        .map(function (value, index) { return value * arr2[index]; })
        .reduce(function (sum, current) { return sum + current; }, 0);
}

/**
 * Multiplies the corresponding values of two arrays and then sums the product.
 * Supported in all mainstream browsers except IE.
 * @param {number[]} arr1 The first array
 * @param {number[]} arr2 The second array
 **/
function sumOfProductsECMASScript2015(arr1, arr2) {
    // The map function creates a new array of the product of arr1 and arr2 values
    // The reduce function then takes this array of products and adds up all the values
    return arr1
        .map((v, i) => v * arr2[i])
        .reduce((sum, v) => sum + v, 0);
}



// Define your arrays
let arr1 = [2,3,4,5];
let arr2 = [4,3,3,1];

// Usage
let answer = sumOfProductsECMASScript4(arr1, arr2);
let answer2 = sumOfProductsECMASScript5(arr1, arr2);
let answer3 = sumOfProductsECMASScript2015(arr1, arr2);


0 commentaires

0
votes

Si vous faites une grande partie de ce genre de chose, vous utiliseriez probablement une bibliothèque comme MathJS :

var arr1 = [2,3,4,5];
var arr2 = [4,3,3,1];
result=math.dot(arr1,arr2);


0 commentaires

0
votes

Effectuez ma carte et réduire

p>

var arr1 = [2,3,4,5];
var arr2 = [4,3,3,1];

var result = arr1.map((v,i) => v * arr2[i]).reduce((x, y) => x + y, 0)

console.log(result)


0 commentaires