注:arr.slice(0)
これは、この「問題」を修正する共通配列コピー「問題」の何百万もの複製の1つではありません
そうは言っても、なぜこの予期しない結果が得られるのかを理解したいと思います。
var oldArr = [[1,2],[3,4]];
var find = oldArr[1];
var newArr = oldArr.slice(0);
console.log(newArr.indexOf(find)); //1?
//proof that newArr is NOT referenced to oldArr
newArr[0] = "Hi";
newArr[1] = "How are you?";
console.log(oldArr+" "+newArr); //"1,2,3,4 Hi,How are you?"
次の代替のいずれかに置き換えるfind
と、期待される が返されます-1
。
[3,4]
直接使用- 変数保持を使用する
[3,4]
- 保持している別の配列を参照して変数を使用する
[3,4]
これらの最後の 3 つの方法と最初の例に違いがある理由についての説明が見つかりません。私の知る限り、何もないはずです。
何か案は?