質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

950閲覧

For文で一回実行するごとにメソッドを追加していきたい

Japaneasee

総合スコア11

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/08/19 14:22

前提・実現したいこと

JavaScriptでApex Legendsというゲームの戦績等を表示できるボットを作っています。

該当のソースコード

javascript

1for(num = 1; num < obj.data.segments.length; num++){ 2 if(obj.data.segments[num].stats.kills.value){//kills.valueが存在した場合 3 const kill = obj.data.segments[0].stats.kills.value; 4 const avatar = obj.data.platformInfo.avatarUrl; 5 const Level = obj.data.segments[0].stats.level.value; 6 const rankName = obj.data.segments[0].stats.rankScore.metadata.rankName; 7 const rankIcon = obj.data.segments[0].stats.rankScore.metadata.iconUrl; 8 const rankValue = obj.data.segments[0].stats.rankScore.value; 9 10 // const legend1 = obj.data.segments[1].metadata.name; 11 // const legend1kill = obj.data.segments[1].stats.kills.value; 12 13 const apexstats = new Discord.MessageEmbed() 14 .setColor("#752133") 15 .setTitle("Apex Legends Status: " + args1) 16 .setThumbnail(avatar) 17 .addField("**KILL**", kill, false) 18 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 19 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 20 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 21 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 22 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 23 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 24 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 25 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 26 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 27 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 28 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 29 .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) 30 .addField("**LEVEL**", Level, false) 31 .addField("**Rank**" + "(" + rankValue + "RP)", rankName, true) 32 .setImage(rankIcon); 33 34 if(num === obj.data.segments.length - 1){ 35 message.channel.send(apexstats) 36 } 37 38 }else if(!obj.data.segments[num].stats.kills.value){ //kills.valueが存在しなかった場合 39 const kill = obj.data.segments[0].stats.kills.value; 40 const avatar = obj.data.platformInfo.avatarUrl; 41 const Level = obj.data.segments[0].stats.level.value; 42 const rankName = obj.data.segments[0].stats.rankScore.metadata.rankName; 43 const rankIcon = obj.data.segments[0].stats.rankScore.metadata.iconUrl; 44 const rankValue = obj.data.segments[0].stats.rankScore.value; 45 46 // const legend1 = obj.data.segments[1].metadata.name; 47 // const legend1kill = "NO DATA"; 48 49 const apexstats = new Discord.MessageEmbed() 50 .setColor("#752133") 51 .setTitle("Apex Legends Status: " + args1) 52 .setThumbnail(avatar) 53 .addField("**KILL**", kill, false) 54 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 55 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 56 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 57 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 58 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 59 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 60 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 61 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 62 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 63 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 64 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 65 .addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 66 .addField("**LEVEL**", Level, false) 67 .addField("**Rank**" + "(" + rankValue + "RP)", rankName, true) 68 .setImage(rankIcon); 69 70 if(num === obj.data.segments.length - 1){ 71 message.channel.send(apexstats) 72 } 73 74 } 75 }

発生している問題・エラーメッセージ

.addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true) .addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true)

問題はこの部分です。このまま実行してしまうと、同じ名前、同じキル数ですべて反映されてしまいます。
なので、実行するたびに1234・・・と順次追加したいです。

補足情報(FW/ツールのバージョンなど)

Nodejsのバージョン : v12.18.3
使用しているエディター : Visual Studio Code
使用しているDiscord.jsのライブラリー : discord.js v12
Discord.js

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.addField(obj.data.segments[num].metadata.name, obj.data.segments[num].stats.kills.value + "キル", true)

このnumの値をダラララッと変更しながらメソッド実行したいんですね?
これはNode.jsやJavaScriptをまぁまぁ使っている人じゃないと難しいですね。
承知しました。

まずこれは分割しても良いのか悪いのかを調べていきましょう。
2通りのパターンのどちらかで動作するはずなので、
コードがシンプルになるcase1から順番に試してみてください。

case 1: 分割しても問題ない

js

1// killの部分で一旦止める 2const apexstats = new Discord.MessageEmbed() 3 .setColor("#752133") 4 .setTitle("Apex Legends Status: " + args1) 5 .setThumbnail(avatar) 6 .addField("**KILL**", kill, false); 7 8// for文で回しながら行データを突っ込む 9for (let num = 1; num < obj.data.segments.length; num++) { 10 apexstats.addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 11} 12 13// 残りのデータを詰めて完成 14apexstats 15 .addField("**LEVEL**", Level, false) 16 .addField("**Rank**" + "(" + rankValue + "RP)", rankName, true) 17 .setImage(rankIcon);

case 2: 毎回代入しないと駄目

js

1// 再代入できるようにletで変数宣言 2let apexstats = new Discord.MessageEmbed() 3 .setColor("#752133") 4 .setTitle("Apex Legends Status: " + args1) 5 .setThumbnail(avatar) 6 .addField("**KILL**", kill, false); 7 8for (let num = 1; num < obj.data.segments.length; num++) { 9 apexstats = apexstats.addField(obj.data.segments[num].metadata.name, 0 + "キル", true) 10} 11 12apexstats = apexstats 13 .addField("**LEVEL**", Level, false) 14 .addField("**Rank**" + "(" + rankValue + "RP)", rankName, true) 15 .setImage(rankIcon);

これで質問文のコアな箇所は完了です
ただし、for文の覗き先が行ったり来たりしているので、
この回答通りに実装しただけではスパッときれいな表は作れないと思います。

中身のデータをしっかり確認しながら少しずつ進めていってください。

投稿2020/08/19 15:02

miyabi-sun

総合スコア21203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Japaneasee

2020/08/19 15:44

本当にありがとうございました! case 1, case 2 両方とも実行可能でした!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問