ページ 11

【解決済】配列の要素の置き換え

Posted: 2020年1月05日(日) 10:43
by curocurocuroro
こんにちは。

配列を上手く使いこなせるようになりたいとJavascriptを勉強中なのですが、
RPGツクールMV上ではどうも上手くいかない場合が多く、
配列に関して詳しい方にご教授願えれば幸いです。

変数1に下記のような配列を代入しました。

コード: 全て選択

$gameVariables.setValue(1, [0,0,2,0,1]);
配列の1番目の要素を「2」に置き換えました。ここまではできます。

コード: 全て選択

$gameVariables.value(1).splice(0, 1, 2);
次に配列の要素を検索して2を1に変更させます。

コード: 全て選択

for(var i = 0; i <= 4; i++){
 if($gameVariables.value(1)[i] = 2){
  $gameVariables.value(1).splice(i, 1, 1);
 }
}
これがうまくいきません。

エラーはおきないのですが、すべてが1に置き換わってしまい、
配列が[1,1,1,1,1]のように出力されてしまいます。
上記の場合は、[1,0,1,0,1]になって欲しいのです。
条件分岐が無視されている?

「splice」ではなく「replace()」「replaceAll()」が上手く使えれば良いのですが、
わたしが使うとどちらもエラーになってしまいます。

やりたいことは単純なので何か良い方法がありましたらお教えいただけますと幸いです。
よろしくお願い致します。

Re: 配列の要素の置き換え

Posted: 2020年1月05日(日) 11:02
by WTR

コード: 全て選択

for(var i = 0; i <= 4; i++){
 if($gameVariables.value(1)[i] === 2){
  $gameVariables.value(1).splice(i, 1, 1);
 }
}
こうでは?
if文の条件式が代入になっています。等号判定は " == " または " === " です。

配列の要素が2であるとき、1に上書きするだけならspliceも要らないような気もしますが。

コード: 全て選択

for(var i = 0; i <= 4; i++){
 if($gameVariables.value(1)[i] === 2) $gameVariables.value(1)[i] = 1;
}

Re: 配列の要素の置き換え

Posted: 2020年1月05日(日) 11:27
by curocurocuroro
WTR さんが書きました:

コード: 全て選択

for(var i = 0; i <= 4; i++){
 if($gameVariables.value(1)[i] === 2) $gameVariables.value(1)[i] = 1;
}
WTR 様

ありがとうございます!
試したところ無事に置き換えることができました!
単純な等号ミスでした…。
if文は一行に圧縮できるのですね!

要素の文字列の置き換えもこれで行けそうです。
検索してもわかりやすく書かれているサイトが無かったので
お返事いただけて助かりました。

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