0
votes

Ajout de deux ou plusieurs fonctions en javascript

J'ai une fonction qui donne trois objets

aa = a.one + b.one + c.one
bb = a.two + b.two + c.two
cc = a.three + b.three + c.three

var all = new myfunc(aa, bb, cc)

Cela donne les trois objets séparés qui sont utiles. Cependant, je veux créer un quatrième objet qui est la somme de a, b et c. En fait, ce serait la même chose que:

var all = new myfunc(36, 10, 17); 

Je peux le faire manuellement:

function myfunc(one, two, three){
    this.one = one;
    this.two = two;
    this.three = three;
}

var a = new myfunc(6,5,7);
var b = new myfunc(10,4,2);
var c = new mufunc(20,1,8);

mais y a-t-il un meilleur façon qui est moins manuelle.


2 commentaires

Non, il n'y a pas d'autre moyen puisque chaque objet ne sait rien des autres.


Est-il possible d'ajouter les trois variables ensemble dans une équation / fonction?


3 Réponses :


3
votes

Vous pouvez bien sûr les mettre dans un tableau et additionner leurs propriétés dans une boucle:

var all = [a, b, c].reduce((obj, x) => {
    obj.one += x.one;
    obj.two += x.two;
    obj.three += x.three;
    return obj;
}, new myfunc(0, 0, 0));

Alternativement, muter une instance initialement vide dans une boucle:

var list = [a, b, c];
function sum(arr, prop) {
    return arr.reduce((acc, x) => acc+x[prop], 0);
}
var all = new myfunc(sum(list, "one"), sum(list, "two"), sum(list, "three"));


1 commentaires

Très belle solution!



1
votes

Le seul moyen d'y parvenir est de créer une fonction pour gérer cela pour vous, si vous comptez l'exécuter régulièrement. Passez simplement les objets et la fonction s'en chargera:

function sum_objects( obj1, obj2, obj3 )
{
  return new myfunc(
    (obj1.one + obj2.one + obj3.one),
    (obj1.two + obj2.two + obj3.two),
    (obj1.three + obj2.three + obj3.three)
  );
}


0 commentaires

-2
votes
function myfunc(one, two, three){
    this.one = one;
    this.two = two;
    this.three = three;
}

myfunc.prototype.add = function(){
    return this.one + this.two + this.three
}

var all = new myfunc(36, 10, 17);
all.add()

2 commentaires

Cela ajoute les propriétés du même objet ensemble, pas la même propriété de trois objets ensemble.


De plus, cela renvoie un nombre, pas un autre objet myfunc .