0
votes

Accès à la matrice d'objet et aux valeurs avec des boucles

J'ai un problème avec la gestion de l'accès à mes valeurs de marécier d'objet, j'ai essayé d'utiliser différentes formes de boucles, en essayant d'obtenir les valeurs avec pourcheach, inclut, essayé d'utiliser les propriétés de l'objet, mais je vous retrouve avec des spaghettis code et je peux gérer le test si elles existent si elles n'existent que si elles ne sont pas, elles sont également passées.

var target;

var itemValue;

function item_obj(name, type, exists) {
    this.name   = name;
    this.type   = type;
    this.exists = exists;
}

function getItemValue(itm) {

    var gm_obj = game_obj[0].item[0].name,
        i, values = [];

    console.log('getItemValue: testing:', itm);

    for (var i in gm_obj.length) {

        if(gm_obj[i].includes(itm)) {

            itm = gm_obj[i];
    console.log(itm);
        } else {

            itm = null;
        }
    }

    if (itm != null) {
        itm = new item_obj(itm, 'item', true);
        console.log('getItemValue: found:', itm);

  document.getElementById('cout').innerHTML = 'found item' + itm;

        return itm;
    } else {
        return false;
    }
}   


2 commentaires

pour ... in ... est pour les objets et non des tableaux (et surtout pas pour les chiffres ( var i dans gm_obj.length )


Alors, quelle est la bonne façon de manipuler, des matrices séparées fonctionnent.


4 Réponses :


0
votes

Il y a peu de problèmes, premier fort> de tous comme Andreas a souligné que vous utilisez la boucle de boucle, car ce scénario suggère d'utiliser un foreach code> boucle second fort> de tous Vous définissez le itm code> à null code> à l'intérieur de la boucle.so the itm code> serait défini sur null Si cela ne correspond pas à la dernière pièce.so ce que j'ai fait est de créer un trouvé code> variable et défini sur true code> si le itm code> est trouvé et renvoyé false code> si ce n'est pas le cas, j'espère que cela résout le problème,

(j'ai ajouté alerte code> afin que vous puissiez voir si l'élément a été trouvé ou non) p>

p>

<!DOCTYPE html>
<html lang="en">
  <head>
   
  </head>
  <body>
    <input type="text" id="input"></input>
<button id="button">submit</button>
<div id="out">
  <span id="cout"></span>
</div>
<div id="list"></div>
 
  </body>
</html>


0 commentaires

0
votes

Votre structure de données ne modifie pas avec précision votre domaine. Je dis cela parce que cela ne communique pas ce que c'est la modélisation.

Vous devez écrire une spécification claire des questions exactes que vous souhaitez que la structure de données réponde et qui vous donnera la forme.

de votre code, ce que je reçois est:

Compte tenu du nom d'un élément, vérifiez si l'élément existe dans la collection. Si tel est le cas, construisez un nouvel objet avec le nom de l'élément et le type "élément"

Dans ce cas, votre structure de données est un tableau plat de noms.

Vous prenez un nom, puis filtrez le tableau de nom pour voir s'il y a des éléments avec ce nom. < / p>

Voici une version qui fonctionne pour la première chose que votre code et vos données communiquent que vous essayez de faire: xxx

remarque comment le tableau est aplatie . Vous avez eu un tableau de matrices avec un seul élément.

Je devine, cependant, que la question que vous voulez qu'elle réponde est la suivante:

Compte tenu du nom d'un élément, vérifiez si l'élément existe dans la collection. Si tel est le cas, construisez un nouvel objet avec le nom de l'élément et le type "élément" et les propriétés de cet élément.

Cette structure de données est une gamme d'objets.

comme exemple: xxx

mais vous devez commencer par une description claire dans une langue clair et langage précis de ce que vous voulez faire, parce que cette description est pseudo-code.

Je pense que si vous regardez avec précaution, vous constaterez que vous finissez par des spaghettis parce que votre description du problème que vous exposez Pour résoudre est le spaghetti pour commencer.

Voici comment vous obtenez un élément de cette structure de données par nom: xxx

Voir, J'ai commencé avec un énoncé propre du problème que je veux que mon code résolve. La structure de données devient évidente et le code de fonctionne avec un minimum et propre - car la structure de données est optimisée pour elle.

Voici un refacteur du tableau.Filter qui soulève la fonction de prédicat : xxx

Dans ce cas, si chaque élément nécessite type: "item" en tant que propriété, vous pouvez l'ajouter aux données, ou sinon ajoutez-le en ligne, comme celui-ci: xxx

Si vous obtenez vos données d'ailleurs, et une structure hideuse, vous avez une étape pour le transformer au modèle que vous devez répondre à vos questions et alors vous écrivez le code pour répondre à ces questions, en tant que préoccupation distincte.

Mais vous commencez toujours par une description claire du résultat, et travailler à partir de là.

Un autre couple de points:

  • Ne créez pas de bloc d'indenté massif que la fin dit else {return} - la sortie tôt. Il réduit l'indentation et vous n'avez pas à lire tout le code pour comprendre (par exemple dans mon code) que s'il n'y a pas de nom passé, nous venons de sortir.

  • Utilisez toujours const . La seule fois que vous devez utiliser une variable est lorsque vous avez une variable réelle que vous devez être responsable. Mais c'est très rare. Tout dans ce code est une constante. Même la requête de l'utilisateur est une constante. Ils demandent un élément et l'élément qu'elles demandent ne changent pas lors de l'exécution du code.


6 commentaires

Ok donc chaque article est un objet lui-même? Je pensais faire un tableau de chaque propriété afin que je puisse y accéder avec un numéro d'index.


Vous n'utiliseriez qu'une structure de données comme celle-ci si des éléments partagés de nombreuses propriétés ou que vous vouliez faire des combinaisons. Même alors, il augmente la complexité des données et du code. Vous êtes préférable de commencer par l'expression la plus simple et la plus directe de ce que vous modélisez.


Merci beaucoup tout le monde, vous avez donné de la nourriture à la pensée, mais je reçois mes erreurs. Je vais faire une restructuration de la matrice d'objet


Toute l'idée consiste à créer un tableau d'objet similaire où j'ai plusieurs objets qui ont tous ces 4 propriétés; Nom, description, événement de jeu, URL (IMG) et que je peux obtenir de tester la saisie de l'utilisateur pour obtenir un type I.E: article, arme, npc et objet de la pièce. Utilisez ensuite cette valeur pour les gérer avec un commutateur. Je pensais que si je faisais correspondre le nom de l'article que je ne le convertitais pas en un objet qui détient le nom, tapez et existez le drapeau pour une manipulation ultérieure.


Si quelqu'un est intéressé ici, c'est l'ensemble du projet, son seul projet d'étude, mais tout retour sur la manière d'améliorer les choses est plus que le bienvenu! GITUB.COM/SILCONSYSTEM/ADVENTUREJS/TREE/Development


La recherche clé est la voie à suivre.



0
votes

Il existe de nombreux aspects à polir dans votre approche, mais en ce qui concerne la fonction de recherche elle-même: xxx pré>

gm_obj est une matrice de tableaux: p> xxx pré>

gm_obj.length est 1, donc pour (var i in gm_obj.length) code> signifie rien. p>

Je crois que votre tentative précédente était p>

<container>
  <div class="column">
<input type="text" id="input"></input>
<button id="button">submit</button>
<div id="out">
  <span id="cout"></span>
</div>
  </div>
<div class="column" id="list"></div>
</container>


0 commentaires

0
votes

Utilisation de l'aide de vous tous j'ai trouvé une solution et j'ai appris un peu plus. J'ai rendu les objets plus uniformes et transporter une propriété de type au lieu de les mettre dans une matrice nommée qui a rendu la logique de recherche de la même manière pour tous les types et créé une petite fonction itérant sur les tableaux et leurs accessoires de nom, coupant ainsi beaucoup de code de merde.

thats l'objet: xxx

et la fonction: xxx

ceci était mon pavé de jeu pour cela Problème

https://codepen.io/silconsystem/pen/ onxobjo? éditeurs = 0001

L'objet fait partie d'une poignée d'entrée de texte utilisée comme: "Prendre de potion" et ajouté à l'inventaire du joueur si trouvé et il est placé dans une DIV fixe où si Des objets sont ajoutés que nous pouvons faire défiler avec la mienne roue ou les touches 1 2 3 4 pour se concentrer et utiliser les touches de curseur

Github: https://github.com/silconsystem/adventurejs [Développement / station de travail-Dev]

Encore une fois merci pour tout le temps!


0 commentaires