2017-04-21 1 views
1

Je regarde depuis un moment et je n'arrive pas à trouver une réponse au problème auquel je suis confronté. Je suis nouveau donc il y a de fortes chances que je fasse ce que j'essaye de faire à tort. Le but de ce que je fais est simplement d'apprendre ce que je peux et ne peux pas faire avec des objets, des tableaux et des boucles, alors que je fais ce projet avec ce que je veux faire, je découvre lentement comment faire ces choses. Donc, ce que j'ai ici, c'est un tas d'objets (avec des clés et des valeurs). Je vais stocker chacun de ces objets individuels (caractères) dans un autre objet appelé caractères.Accès aux clés et à la valeur des objets dans les objets

function Character(sociability, assertiveness, adventurous, emotionalExpressiveness, kindness, altruism, affection, trust, impulseControl, thoughtfullness, emotionalStability, sexuality, evil, intellectualCuriosity, novelty, interests, intelligence) { 
    "use strict"; 
    this.sociability = sociability; 
    this.assertiveness = assertiveness; 
    this.adventurous = adventurous; 
    this.emotionalExpressiveness = emotionalExpressiveness; 
    this.kindness = kindness; 
    this.altruism = altruism; 
    this.affection = affection; 
    this.trust = trust; 
    this.impulseControl = impulseControl; 
    this.thoughtfullness = thoughtfullness; 
    this.emotionalStability = emotionalStability; 
    this.sexuality = sexuality; 
    this.evil = evil; 
    this.intellectualCuriosity = intellectualCuriosity; 
    this.novelty = novelty; 
    this.interests = interests; 
    this.intelligence = intelligence; 
} 

var aloy = new Character(0, 11, 11, 0, 11, 11, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0), 
    bayonetta = new Character(0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 17, 0, 11, 0, 0), 
    elizabeth = new Character(0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 12), 
    ellie = new Character(0, 12, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 11, 10), 

//store all above objects into new object 
var Users = { 
    aloy: aloy, 
    bayonetta: bayonetta, 
    elizabeth: elizabeth, 
    ellie: ellie, 
}; 

Après cela, je crée un tableau qui comprend les noms de 5 des clés de l'objet de caractères:

var matchArr = ["sociability", "assertiveness", "adventurous", "emotionalExpressiveness", "kindness"] 

Voici la partie que je suis coincé à et je vais essayer d'expliquer du mieux que je peux. Je vais d'abord vous montrer le code, puis essayer de donner un sens à ce que je veux faire.

for (i = 0; i <= 4; i++) { 
    for (var obj in Users) { 
     if (Users.obj.matchArr[0] > 1) { 
      console.log(obj) 
     } 
    } 
} 

Ce que je veux faire est de boucle à travers l'objet Users et si l'un de l'objet dans cet objet (le Characters) a une clé avec une valeur qui satisfait ma déclaration if, connectez-vous le nom de cet objet de caractère .

-Si je me connecte for (var obj in Users) { console.log(obj); } boucle I à chaque nom Character qui est stocké dans Users, comme prévu.

-Si je me connecte matchArr[0] par itslef, j'obtiens "sociability" comme attendu de ma baie matchArr.

-Si je me connecte Users.aloy.sociability je reçois 0 comme prévu que c'est la valeur de aloy.sociability

si je me connecte -mais Characters.aloy.matchArr[0] je reçois une erreur (Impossible de lire la propriété « 0 » undefined). Je ne vois pas pourquoi c'est différent que de taper explicitement sociability puisque c'est la valeur exacte de matchArr[0].

Comment puis-je faire référence correctement Users.aloy.sociability par exemple de la façon dont je tente de. Dans ma tête, il est logique que lorsque je référence Users.obj.matchArr[0], c'est comme si je tapais explicitement Users.aloy.sociability, Users.bayonetta.sociability` (et ainsi de suite comme il boucle). Encore une fois, je vais peut-être me tromper complètement et j'apprécierais toute aide, même si cela ne fait que me diriger vers d'autres documents que je peux lire et obtenir une meilleure compréhension qui pourrait me mener dans la bonne direction.

Ma seule supposition est que les valeurs de tableau (par exemple matchArr[0] > "sociability") est une chaîne et je ne peux pas utiliser les chaînes de cette façon. Si oui, je ne sais pas quoi faire à ce sujet.

Merci d'avance pour toute aide.

+0

Veuillez raccourcir vos exemples de code. Vous n'avez besoin que de quelques caractères avec quelques attributs pour illustrer votre question. –

Répondre

1

Cette boucle doit imprimer le nom du personnage et quel attribut le caractère correspondant.

for (var key in Users) { 
    matchArr.forEach(function(el) { 
    if (Users[key][el] > 1) { 
     console.log(key + ' matches attribute of ' + el); 
    } 
    }); 
} 

Fonctionnement code example on jsfiddle.

+0

Cela m'a orienté dans la bonne direction et j'ai pu l'adapter à ce dont j'avais besoin. J'ai été capable d'omettre la boucle FOR initiale que j'utilisais et d'utiliser simplement la partie "for (var key in Users) {}". La plus grande chose semblait que j'écrivais le reste faux. L'écrire en tant qu'utilisateurs [key] [matchArr [0]] fonctionne pour ce dont j'ai besoin en ce moment. Merci beaucoup. –

0

permet de voir:

//loop each Users 

for(character in Users) { 
    //Loop each matchArr 
    matchArr.forEach(function(skill) { 
    //at this point we are testing something like this: 
    //If Users['aloy']['sociability'] > 1  
    if(Users[character][skill] > 1) { 
     //log aloy 
     console.log(character); 
    } 
    } 
}