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

返信する
curocurocuroro
記事: 7
登録日時: 2020年1月05日(日) 10:15

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

投稿記事 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()」が上手く使えれば良いのですが、
わたしが使うとどちらもエラーになってしまいます。

やりたいことは単純なので何か良い方法がありましたらお教えいただけますと幸いです。
よろしくお願い致します。
最後に編集したユーザー curocurocuroro [ 2020年1月05日(日) 11:28 ], 累計 1 回
アバター
WTR
記事: 625
登録日時: 2015年12月22日(火) 19:14

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

投稿記事 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;
}
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
curocurocuroro
記事: 7
登録日時: 2020年1月05日(日) 10:15

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

投稿記事 by curocurocuroro »

WTR さんが書きました:

コード: 全て選択

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

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

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

ありがとうございました。
返信する

“MV:質問”に戻る