-1
votes

Comment `réduire» sur un objet?

Je me demande comment utiliser certains Réduire logique sur un objet plutôt qu'un tableau. Quelque chose comme itérant sur des tuples représentés par

[objet_property, propriété_value] ).

J'ai essayé du code comme xxx > Mais cela n'effectue aucune itération. Je ne peux pas comprendre pourquoi.

Peut-être parce que les propriétés de l'objet ne sont pas énumérables?

y a-t-il un moyen d'exécuter une fonction de réduction sur un objet?

Remarque: Il n'y a pas de but final spécifique; J'explore ce qui est possible ou ce qui pourrait être de meilleurs modèles.


7 commentaires

array.pototype.reduce () suppose que le contexte a une propriété de la propriété et des touches [0..length - 1]


Quelle est l'attente de production?


Aucune sortie attendue; Ce n'est pas le problème. Je veux savoir s'il est possible de itérer avec réduire, quelle que soit votre opération dans le rappel.


Aussi Réduire attend que votre rappel renvoie S la nouvelle valeur de l'accumulateur. Je pense que vous ne devriez pas utiliser réduire ici du tout.


@Bergi Vous avez raison, je l'ai oublié (je vais éditer). Comme je l'ai dit, le code de rappel n'est pas mon problème ici, ce n'est qu'un exemple.


Que voulez-vous accomplir pour courir réduire dans un objet? Quel est le résultat final souhaité? Réduire l'objettive obtient une valeur unique. Si vous voulez itérer .Map est plus adéquat.


.map renvoie un tableau avec la même longueur comme l'original. En fait veux une valeur unique. Il n'y a pas de valeur de retour pour accomplir, je l'ai déjà mentionné; Je suis juste en train d'expérimenter avec JavaScript. - Mais tout le monde continue de se concentrer sur ce que les rappels devraient revenir. La réponse est, comme vous l'avez dit: "une seule valeur réduite". - spécifiquement, je veux directement renvoyer le traitement d'une seule instruction (comme un appel de fonction; par exemple réduire () dans ce cas), Sans avoir à créer une variable temporaire, exécutez une boucle pour pour l'initialiser, renvoyez enfin la variable et GC.


4 Réponses :


2
votes

Méthodes de tableau comme Réduire () ne peut fonctionner que sur des matrices ou des objets similaires à une matrice (avec des propriétés et des propriétés numériques).

Vous pouvez appeler objet .Values ​​() pour obtenir une matrice de valeurs de propriété d'un objet.


0 commentaires

1
votes

Vous pouvez exécuter réduire () méthode sur la matrice renvoyée par objet.keys () fonction. Il ressemble à ceci: xxx


0 commentaires

0
votes

vous pouvez utiliser Object.Keys (Obj) qui vous fournira des noms de propriété sur ce tableau, vous pouvez appliquer n'importe quelle méthode de tableau (prédéfinie) Comme ceci

​​ p>

var obj = { foo: 'bar', bar: 'baz' };
var prev=[] //let say prev is array in which you want to store some property value

Object.keys(obj).reduce(function(element) {
    // you can have condition here as well
    prev.push(obj[element]);
});


0 commentaires

2
votes

Plusieurs erreurs.

  • obj n'est pas un tableau. Utiliser .Values ​​() li>
  • Le résultat de prev.Push n'est pas le tableau, est le résultat de la méthode de poussée qui est 1 (entier); li>
  • Il n'y a pas de var pour obtenir le résultat final. li> ul>

    Voici un exemple de travail: p>

    p>

    var obj = { foo: 'bar', bar: 'baz' };
    console.log(Object.values(obj));


1 commentaires

Toutes les réponses correctes, mais concentrées sur les mauvaises choses. J'ai résolu la valeur de retour, cependant, merci. La question concerne la manière de (si possible) d'exécuter une réduction sur un objet; Il ne s'agit pas d'obtenir les valeurs d'objet. Oui: La question est parce que j'essaye JavaScript et la question est une pure curiosité. La note sur la nommée est vraie également, mais j'ai explicitement choisi de ne pas vous concentrer sur l'intérieur du rappel, alors je l'ai appelé simplement à souligner son rôle d'accumulateur. Au fait, imo La réponse correcte est le détail de la propriété de longueur manquante .