Javascript 数组中的推送对象 var p={ id:null }; 对于(var copyArray=[],i=0;i

Javascript 数组中的推送对象 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

copyArray中的所有id都获得2值。 结果CopyArray({id=2},{id=2},{id=2})

对数组中的对象执行正常的推送操作,并在插入后更新索引

但不知何故,副本数组中的所有id都得到了相同的id
我在这里做错了什么

您重复地将同一对象推入数组,并在运行时更新该对象的
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);