Javascript 为什么此数组在未被要求更改其值的情况下更改其值?
我用这样的方式声明了这个数组 :Javascript 为什么此数组在未被要求更改其值的情况下更改其值?,javascript,arrays,Javascript,Arrays,我用这样的方式声明了这个数组 : var gamme = [ ["A"], ["A♯","B♭"], ["B","C♭"], ["C","B♯"], ["C♯","D♭"], ["D"], ["D♯","E♭"], ["E","F♭"], ["F","E♯"], ["F♯","G♭"], ["G"], ["G♯","A♭"], ]; 使用这个数组,我将生成另一个数组。 我想让气质像这样 : 例如 :
var gamme =
[
["A"],
["A♯","B♭"],
["B","C♭"],
["C","B♯"],
["C♯","D♭"],
["D"],
["D♯","E♭"],
["E","F♭"],
["F","E♯"],
["F♯","G♭"],
["G"],
["G♯","A♭"],
];
使用这个数组,我将生成另一个数组。
我想让气质像这样 :
例如 :
temperamentEgal[10] = [103.82617439498631, ["G♯","A♭"]]
temperamentEgal[25] = [233.08188075904502, ["A♯","B♭"]]
这就是我要做的 :
base = pow(2,1/12); // 2^(1/12)
for (i=0; i<12*octaves; i++) // octaves = 6
{
temperamentEgal[i] = []
temperamentEgal[i][0] = 55*pow(base,i); // = 138.6
temperamentEgal[i][1] = gamme[i%12]; // = ["C♯","D♭"]
console.log("gamme["+i%12+"] = " + gamme[i%12]);
for (j=0; j<temperamentEgal[i][1].length; j++)
{
var octaveNote = 1+i/12;
octaveNote = floor(octaveNote);
temperamentEgal[i][1][j] += str(octaveNote);
}
}
如果我注释掉tempermentegal[I][1][j]+=str(octaveNote)代码>它不再发生了
为什么更改tempermentegal[i][1]
的值也会更改gamme[i%12]
的值?在不更改gamme
的情况下,您会更改此行引用的匿名数组:
temperamentEgal[i][1] = gamme[i%12];
现在,此赋值的右侧和左侧都指向相同的数组对象-如果要修改数组的副本,应复制数组的值,而不是对数组对象的引用:
ES5:templamentegal[i][1]=gamme[i%12].slice()代码>
ES6:tempermentegal[i][1]=[…gamme[i%12]]
使用
temperamentEgal[i][1] = gamme[i%12];