Javascript 数组中的推送对象 var p={ id:null }; 对于(var copyArray=[],i=0;i
copyArray中的所有id都获得2值。 结果CopyArray({id=2},{id=2},{id=2}) 对数组中的对象执行正常的推送操作,并在插入后更新索引 但不知何故,副本数组中的所有id都得到了相同的idJavascript 数组中的推送对象 var p={ id:null }; 对于(var copyArray=[],i=0;i,javascript,arrays,object,Javascript,Arrays,Object,copyArray中的所有id都获得2值。 结果CopyArray({id=2},{id=2},{id=2}) 对数组中的对象执行正常的推送操作,并在插入后更新索引 但不知何故,副本数组中的所有id都得到了相同的id 我在这里做错了什么您重复地将同一对象推入数组,并在运行时更新该对象的id属性 如果希望阵列中有多个对象,则需要创建多个对象: var copyArray=[]; while(copyArray.length
我在这里做错了什么您重复地将同一对象推入数组,并在运行时更新该对象的
id
属性
如果希望阵列中有多个对象,则需要创建多个对象:
var copyArray=[];
while(copyArray.length<3){
copyArray.push({
id:copyArray.length
});
}
log(JSON.stringify(copyArray))代码>
您还可以创建一个函数,为对象创建克隆:
var p = {
id: null
};
for (var copyArray = [], i = 0; i < 3; i++) {
copyArray.push(p);
copyArray[i].id = (copyArray.length) - parseInt(1, 10);
}
console.log(copyArray);
然后,您可以使用原始代码,但只需稍作更改:
JSON.clone = function(json) {
var
temp = null,
key = null;
if (json === null || typeof json !== 'object') {
return json;
}
temp = json.constructor(); // changed
for (key in json) {
if (json.hasOwnProperty(key)) {
temp[key] = JSON.clone(json[key]);
}
}
return temp;
};
var p={
id:null
};
对于(var copyArray=[],i=0;i<3;i++){
push(JSON.clone(p));
copyArray[i].id=copyArray.length-1;
}
log(copyArray);
旁注:parseInt(1,10)
只是一种冗长而低效的编写1
的方法parseInt
用于将字符串解析为整数。@T.J.Crowder parseInt(1,10)中的10是多少?@Alex转换为十进制,您还可以使用2
,8
,16
来表示二进制、八进制和十六进制respectively@Alex:要使用的基数(基数)。10(十进制)是我们通常写数字的基数。它是10,因为数字中的每个“位置”都是10的幂。例如,123是(1 x 10²)+(2 x 10ª)+(3 x 10²)⁰).@亚历克斯:我没有使用任何一种资源,只是这些年来我学到了很多东西。我的两个主要参考资料是和。MDN更为用户友好,但也由任何想要注册Mozilla帐户的人共同编辑。它过去一直都很优秀;过去几年,人们一直在贡献自己的东西,但他们都不擅长与原作者一样严谨、见多识广,仍然很好。不要使用w3schools。它很有效,谢谢。有什么解释为什么我们不能这样做吗,,?@KunalVashist:第一句是解释:你在反复推动同一个对象。为什么要否决这个答案?
var p = {
id: null
};
for (var copyArray = [], i = 0; i < 3; i++) {
copyArray.push(JSON.clone(p));
copyArray[i].id = copyArray.length - 1;
}
console.log(copyArray);