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.
3 Réponses :
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"));
Très belle solution!
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)
);
}
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()
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 .
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?