2017-04-21 17 views
1

私はしばらく見てきましたが、私が直面している問題に対する答えを見つけることができないようです。私は新しいので、私が間違ってやろうとしていることを単にやっている可能性はかなり高いです。私がやっていることの目的は、オブジェクト、配列、ループでできることとできないことを学ぶことです。私がやりたいことでこのプロジェクトを進めていくうちに、私はゆっくりとやり方を考え出していますこれらの事。オブジェクト内のオブジェクトのキーと値へのアクセス

ここで私が持っているものは、(キーと値を使って)たくさんのオブジェクトです。これらの個々の(Character)オブジェクトをCharactersという別のオブジェクトに格納します。この後

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, 
}; 

私はCharacterオブジェクトからキーの5の名前が含まれて配列を作成します。

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

ここで私がで立ち往生していると私が説明しよう部分ですそれは私ができる限り最高です。コードを最初に示してから、自分がしたいことを理解しようとします。私が何をしたいか

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

Usersオブジェクトをループであり、そのオブジェクト(Characters)内のオブジェクトのいずれかが私のif文を満たす値を持つキーを持っている場合、その文字オブジェクトの名前をログに記録します。

- ログには、for (var obj in Users) { console.log(obj); }と表示されます。Characterの名前は、期待通りにUsersに格納されています。

- 私がmatchArr[0]によってログした場合、私はmatchArr配列から期待通りに"sociability"を得る。

私はUsers.aloy.sociabilityをログ-ifそれはaloy.sociability

の値だブタ私はCharacters.aloy.matchArr[0]を記録した場合、私はエラーを取得する(プロパティを読み取ることができません「0」未定義の)として予想通り、私は0を取得します。なぜこれが明示的にsociabilityと入力するのと違うのか分かりませんが、これは正確な値がmatchArr[0]なのでです。

たとえば、私がしようとしている方法で、たとえばUsers.aloy.sociabilityを正しく参照するにはどうすればよいですか。私の頭の中では、Users.obj.matchArr[0]を参照すると、それは明示的にUsers.aloy.sociability、Users.bayonetta.sociability`(と同様にループします)と明示的に入力するのと同じです。

また、私はこれについて完全に間違っているかもしれません。私が読める他のドキュメントを指し示していても、正しい方向に私を導くより良い理解を得ることができます。

私の推測では、配列の値(例:matchArr[0] > "sociability")は文字列であり、そのように文字列を使用することはできません。もしそうなら、私はそれについて何をすべきかわかりません。

ありがとうございました。

//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); 
    } 
    } 
} 
+0

コード例を短くしてください。あなたはあなたの質問を説明するためにいくつかの属性を持つ少数の文字が必要です。 –

答えて

1

このループは、文字の名前を印刷した文字が一致するものを属性する必要があります

+0

これは正しい方向に私を指摘し、私はそれが私が必要とするものに適応することができました。私は使用していた最初のFORループを省き、 "for(ユーザーのvarキー){}"部分を使用することができました。私が残りのことを間違って書いていたような最大のものが見えました。 Users [key] [matchArr [0]]として書いて、私が今必要なもののために働いています。どうもありがとうございました。 –

0

を見てみましょう。

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

code example on jsfiddleの作業。

関連する問題