Re: 【解決】二次元配列の要素同士が連動(?)する条件と回避方法が分かりません。
Posted: 2022年12月14日(水) 20:35
それはもしかして、アイテムを入手する時、同じ配列を追加していませんか?
たぶん、次の結果はtrueになって、同じ参照だと思います。
下記やり方で追加すると、同じ参照を追加しているだけになって、質問の件の連動する状態になります。
同じ配列を追加していたから、同じアイテムIDのものが連動してしまったのが、原因だと思います。
解決方法は、
.slice()で新しい配列(単純なディープコピー)を作成するか、直接配列を指定して新たに作成します。
たぶん、次の結果はtrueになって、同じ参照だと思います。
コード: 全て選択
console.log($gameVariables.value(DBvalNum)[3] === $gameVariables.value(DBvalNum)[4]) //true
$gameVariables.value(DBvalNum)[3][2] === 1; //0でなく、1で代入される
同じ配列を追加していたから、同じアイテムIDのものが連動してしまったのが、原因だと思います。
コード: 全て選択
var items = [];
var item1 = [0,1,100,98,0,0,0];
var item2 = [0,2,100,0,0,0,0];
items.push(item1,item2,item1,item2);
items[0] === items[2]; //true
items[0][3] = 200;
items[2][3]; //200
.slice()で新しい配列(単純なディープコピー)を作成するか、直接配列を指定して新たに作成します。
コード: 全て選択
var items = [];
var item1 = [0,1,100,98,0,0,0];
var item2 = [0,2,100,0,0,0,0];
items.push(item1.slice(), item2.slice(), item1.slice(), item2.slice());
items.push([0,1,100,98,0,0,0], [0,2,100,0,0,0,0]);