用其他数组中的元素替换Javascript数组元素
我有以下使用Java数组的简单代码用其他数组中的元素替换Javascript数组元素,javascript,multidimensional-array,Javascript,Multidimensional Array,我有以下使用Java数组的简单代码 var fruits = [["Banana", "Orange", "Apple", "Mango"]]; var names = ["Adam", "Emma", "Joe", "David"]; var newArray=[]; for (var i = 0 ; i < 4 ; i++){ newArray[i] = fruits[0]; // Copy fruits[
var fruits = [["Banana", "Orange", "Apple", "Mango"]];
var names = ["Adam", "Emma", "Joe", "David"];
var newArray=[];
for (var i = 0 ; i < 4 ; i++){
newArray[i] = fruits[0]; // Copy fruits[] into newArray[]
newArray[i][1] = names[i]; // Then replace the 2nd element with names[]
}
然而,我得到了这个最终的结果,却不知道为什么
newArray[0] = ["Banana", "David" , "Apple", "Mango"]
newArray[1] = ["Banana", "David" , "Apple", "Mango"]
newArray[2] = ["Banana", "David" , "Apple", "Mango"]
newArray[3] = ["Banana", "David" , "Apple", "Mango"]
我对JS还很陌生,所以我想这可以归结为一些简单的事情,但在这个阶段,这是一堵无法逾越的砖墙。非常感谢您的帮助。问题是:
newArray[i] = fruits[0]; // Copy fruits[] into newArray[]
newArray[i]
不是fruits
中第一项的副本,而是对内存中相同对象的另一个引用。因此,当您更改newArray[i]
时,您也会更改fruits[0]
,并且您还会更改对fruits[0]
具有相同引用的任何其他变量,即newArray
中的每个项目
在每次迭代中显式克隆结果[0]
:
var=[
[“香蕉”、“橘子”、“苹果”、“芒果”]
];
变量名称=[“亚当”、“艾玛”、“乔”、“大卫”];
var newArray=[];
对于(变量i=0;i<4;i++){
新数组[i]=[…水果[0]];
newArray[i][1]=名称[i];
}
log(newArray)代码>Java不是JavaScript-清楚区分很重要。很遗憾,[…fruits[0]]在我的网站上发出语法错误,我应该注意我是通过Google Apps JavaScript运行的,所以可能还不支持spread语法。你应该清楚你的问题有哪些限制。您可以使用slice
而不是spread语法,请参见编辑(或者您可以使用Babel自动向下传输到ES5,允许您使用最新和最好的语言版本编写,这对更大的项目非常有用)我最后使用了您的示例,但结果是[0]。slice()而不是[…fruits[0]]
newArray[i] = fruits[0]; // Copy fruits[] into newArray[]