Javascript 如何在循环中存储每个对象?

Javascript 如何在循环中存储每个对象?,javascript,arrays,for-loop,object,Javascript,Arrays,For Loop,Object,我想做的是处理JSON数据,并在退出for循环后存储每个对象。但是,obj在每次迭代中都会更新,因此objectArray在其中的每个元素中只保存David的信息。我希望objArray保存每个已处理的JSON对象(下面的屏幕截图)。JSON过程是存储搜索用户名和名称,并将它们存储在objectArray中。有人能帮我弄清楚如何在objectArray中存储每个对象吗?先谢谢你 constobj={}; var objectArray=[]; 风险值数据=[ { “userId”:“123”,

我想做的是处理JSON数据,并在退出
for
循环后存储每个对象。但是,
obj
在每次迭代中都会更新,因此
objectArray
在其中的每个元素中只保存David的信息。我希望
objArray
保存每个已处理的JSON对象(下面的屏幕截图)。JSON过程是存储搜索用户名和名称,并将它们存储在
objectArray
中。有人能帮我弄清楚如何在
objectArray
中存储每个对象吗?先谢谢你

constobj={};
var objectArray=[];
风险值数据=[
{
“userId”:“123”,
“姓名”:“约翰”,
“电话号码”:“123-456-6789”
},
{
“用户ID”:“345”,
“名称”:“夏季”,
“电话号码”:“535-631-9742”
},
{
“用户ID”:“789”,
“姓名”:“大卫”,
“电话号码”:“633-753-1352”
}
]
var dataLen=data.length;
var人员=数据;
createKeyValue=((键,值)=>{
var temp={};
温度[“值”]=值;
obj[键]=温度;
});
而(数据长度>0){
for(让Object.entries的[key,value](数据[0])){
开关(钥匙){
案例“userId”:
createKeyValue(键,值);
打破
案例“名称”:
createKeyValue(键,值);
打破
违约:
}
}
objectArray.push(obj);
data.shift();
dataLen-=1;
}

您可以使用一个简单的
forEach()
循环来创建新对象并将其推送到
objArray
数组中

const数据=[
{
“userId”:“123”,
“姓名”:“约翰”,
“电话号码”:“123-456-6789”
},
{
“用户ID”:“345”,
“名称”:“夏季”,
“电话号码”:“535-631-9742”
},
{
“用户ID”:“789”,
“姓名”:“大卫”,
“电话号码”:“633-753-1352”
}
];
设objArray=[];
data.forEach(person=>{
推({
userId:{value:person.userId},
名称:{value:person.name}
});
});

控制台日志(objArray)
您可以使用一个简单的
forEach()
循环来创建新对象并将其推送到
objArray
数组中

const数据=[
{
“userId”:“123”,
“姓名”:“约翰”,
“电话号码”:“123-456-6789”
},
{
“用户ID”:“345”,
“名称”:“夏季”,
“电话号码”:“535-631-9742”
},
{
“用户ID”:“789”,
“姓名”:“大卫”,
“电话号码”:“633-753-1352”
}
];
设objArray=[];
data.forEach(person=>{
推({
userId:{value:person.userId},
名称:{value:person.name}
});
});
控制台日志(objArray)正如我们的朋友所说,更适合使用forEach函数,而不是map函数:

data.forEach(elem => {
    objectArray.push({
        userId: { value: elem.userId },
        name: { value: elem.name }
    });
})
正如我们和朋友所说,使用forEach函数比使用map函数更合适:

data.forEach(elem => {
    objectArray.push({
        userId: { value: elem.userId },
        name: { value: elem.name }
    });
})

您看到的错误是由于JavaScript(以及一般编程)中的一个称为“.”的概念造成的
JS中的对象不是作为整组数据传递,而是作为存储数据的地址传递。这节省了大量开销,因为对象可能变得相当大

然而,在你的情况下,你遇到了一种可能绊倒你的方法。由于
obj
实际上是通过引用而不是通过值传递的,因此您实际上是
。将同一地址(属于
obj
)的3个副本推送到
objectArray
上,而不是推送到3个不同的数据集上

解决此问题的更好方法是使用名为的JS数组函数。MDN可能最能解释此函数:

map()
方法创建一个新数组,其中填充了对调用数组中的每个元素调用所提供函数的结果

您可以在
数据
数组中使用它,如下所示:

var objectArray=[];
风险值数据=[{
“userId”:“123”,
“姓名”:“约翰”,
“电话号码”:“123-456-6789”
},
{
“用户ID”:“345”,
“名称”:“夏季”,
“电话号码”:“535-631-9742”
},
{
“用户ID”:“789”,
“姓名”:“大卫”,
“电话号码”:“633-753-1352”
}
]
objectArray=data.map(dataEl=>({
用户标识:{
值:dataEl.userId,
},
姓名:{
值:dataEl.name,
},
}));
log(objectArray)
。作为控制台包装器{
最大高度:100%!重要;

}
您看到的错误是由于JavaScript(以及一般编程)中的一个称为“.”的概念造成的
JS中的对象不是作为整组数据传递,而是作为存储数据的地址传递。这节省了大量开销,因为对象可能变得相当大

然而,在你的情况下,你遇到了一种可能绊倒你的方法。由于
obj
实际上是通过引用而不是通过值传递的,因此您实际上是
。将同一地址(属于
obj
)的3个副本推送到
objectArray
上,而不是推送到3个不同的数据集上

解决此问题的更好方法是使用名为的JS数组函数。MDN可能最能解释此函数:

map()
方法创建一个新数组,其中填充了对调用数组中的每个元素调用所提供函数的结果

您可以在
数据
数组中使用它,如下所示:

var objectArray=[];
风险值数据=[{
“userId”:“123”,
“姓名”:“约翰”,
“电话号码”:“123-456-6789”
},
{
“用户ID”:“345”,
“名称”:“夏季”,
“电话号码”:“535-631-9742”
},
{
“用户ID”:“789”,
“姓名”:“大卫”,
“电话号码”:“633-753-1352”
}
]
objectArray=data.map(dataEl=>({
用户标识:{
值:dataEl.userId,
},
姓名:{
值:dataEl.name,
},
}));
log(objectArray)
。作为控制台包装器{
最大高度:100%!重要;

}
数据
已经是一组人员对象。你怎么办