多次元配列(myArray)からランダムな項目を選択し、新しい変数(myTempArray)に保存し、最初の項目をID番号で更新する関数を記述しようとしています)。Javascriptスライスで古い値を更新する
mytempArray [0] [0] [0]の値を変更すると、myArrayの同等の値も更新されます。私はこれらの値を変えたくありません。
どうやってこれをやめるのですか?スライスが間違った方法を使用していますか?もしそうなら、私はそれを変更して他の場所で使うことができるように元の配列エントリをどのように複製するのですか?以下のコードは次のとおりです。
var myArray = [
[[0, "Description 1", 0, 0, 1, 6, 0, 0, 0, true, 0]],
[[0, "Description 2", 0, 0, 1, 6, 0, 0, 0, true, 0]],
[[0, "Description 3", 0, 0, 1, 6, 0, 0, 0, true, 0]],
];
function randomNumber (min, max) {
return Math.floor((Math.random() * max) + min);
};
counter = 1;
function myfunction(){
myrand = randomNumber(0,myArray.length-1);
mytempArray = myArray.slice(myrand,myrand+1);
mytempArray[0][0][0] = counter;
counter++;
};
myfunction();
配列は参照型です。 'slice'は浅いクローンのみを行い、ネストされた配列は参照によって新しい配列にコピーされます。 –
ディープ・コピー・アレイの方法をここで見てください。 https://stackoverflow.com/questions/597588/how-do-you-clone-an-array-of-objects-in-javascript – MynockSpit
'Object.assign()'以外にも '... [] 'スプレッド演算子。 –