私はしばらく見てきましたが、私が直面している問題に対する答えを見つけることができないようです。私は新しいので、私が間違ってやろうとしていることを単にやっている可能性はかなり高いです。私がやっていることの目的は、オブジェクト、配列、ループでできることとできないことを学ぶことです。私がやりたいことでこのプロジェクトを進めていくうちに、私はゆっくりとやり方を考え出していますこれらの事。オブジェクト内のオブジェクトのキーと値へのアクセス
ここで私が持っているものは、(キーと値を使って)たくさんのオブジェクトです。これらの個々の(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);
}
}
}
コード例を短くしてください。あなたはあなたの質問を説明するためにいくつかの属性を持つ少数の文字が必要です。 –