アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっています。
配列から任意の要素を抽出するにはfilter()で簡単にできますが、
これと同じようにオブジェクトから任意のプロパティを抽出するにはどうすれば良いですか。
例えば、次のようなデータがあって、
勇者のレベルが上がった時に、その時点で覚えられる呪文を全部取得する最も簡単な方法はなんですか。
呪文 = {
ホイミ: {mp: 3, 覚えるレベル: {勇者: 5, 僧侶: 1},
ルーラ: {mp: 8, 覚えるレベル: {勇者: 8, 魔女: 15}
}
パーティー = [
勇者: {レベル: 1, 呪文 = []},
魔女: {レベル: 1, 呪文 = []}
]

A 回答 (1件)

for (職 in パーティ) {


_ 位 = パーティ[職].レベル
_ 会得 = []
_ for (名 in 呪文) {
_ _ if (呪文[名].覚えるレベル[職] <= 位) {
_ _ _ 会得.add(名)
_ _ }
_ }
_ パーティー[職].呪文 = 会得
}

参考)
https://developer.mozilla.org/ja/docs/Web/JavaSc …

もっと厳密にやるならば
https://developer.mozilla.org/ja/docs/Web/JavaSc …
https://developer.mozilla.org/ja/docs/Web/JavaSc …
    • good
    • 0
この回答へのお礼

ありがとうございます^^;
改めて見ると私の質問、構文エラーがひどい。。。

ご回答の_は、読みやすくするための単なる字下げ、会得.add(名)は、会得.push(名)と読み替えました。
このコードで満足する結果が得られました。

察するにオブジェクトには、配列のfilter()のような便利なメソッドがないので、filter()を使いたいなら、あらかじめObject.keys()や.entries()で配列を作るという手順が必要と認識しました。

さらに調べますと、値だけ取ってくるObject.values()を知り、
Object.values().filter()でオブジェクトから任意のプロパティ値を全部取ってくる事ができました。

お礼日時:2023/08/10 15:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!