更新循环内部的Javascript对象属性
我试图用另一个看似微不足道的对象更新一个JS对象,但该值没有更新 设sampleObj={ id:1, 姓名:“凯利” } 让用户数据=[{ 学生:[{ id:1, 姓名:“桑德拉” }] }, { 学生:[{ id:2, 名字:“杰罗姆” }] } ] 对于用户数据的let组{ 让学生成为小组的一员{ 如果student.id==sampleObj.id{ console.log“正在更新学生对象” 学生=sampleObj //student={…sampleObj}另一次尝试失败 //userData[group].students[student]=sampleObj另一次失败的尝试 } } } console.log'userData',userData改用forEachel,index,这样您就可以使用索引进行更新: 设sampleObj={ id:1, 姓名:“凯利” } 让用户数据=[{ 学生:[{ id:1, 姓名:“桑德拉” }] }, { 学生:[{ id:2, 名字:“杰罗姆” }] } ] userData.forEachgroup,m=>{ group.students.forEachstudent,n=>{ 如果student.id==sampleObj.id{ console.log“正在更新学生对象” 用户数据[m]。学生[n]=sampleObj } } } console.log'userData',userData改用forEachel,index,这样您就可以使用索引进行更新: 设sampleObj={ id:1, 姓名:“凯利” } 让用户数据=[{ 学生:[{ id:1, 姓名:“桑德拉” }] }, { 学生:[{ id:2, 名字:“杰罗姆” }] } ] userData.forEachgroup,m=>{ group.students.forEachstudent,n=>{ 如果student.id==sampleObj.id{ console.log“正在更新学生对象” 用户数据[m]。学生[n]=sampleObj } } }更新循环内部的Javascript对象属性,javascript,Javascript,我试图用另一个看似微不足道的对象更新一个JS对象,但该值没有更新 设sampleObj={ id:1, 姓名:“凯利” } 让用户数据=[{ 学生:[{ id:1, 姓名:“桑德拉” }] }, { 学生:[{ id:2, 名字:“杰罗姆” }] } ] 对于用户数据的let组{ 让学生成为小组的一员{ 如果student.id==sampleObj.id{ console.log“正在更新学生对象” 学生=sampleObj //student={…sampleObj}另一次尝试失败 //u
log'userData',userData您永远不会更新实际的userData。要更新它,您应该在循环中引用userData对象,而不是用于迭代对象的临时变量 因此,请尝试以下方法:
let sampleObj = { id: 1, name: 'Kelly' }
let userData = [
{
students: [
{ id: 1, name: 'Sandra' }
]
},
{
students: [
{ id: 2, name: 'Jerome' }
]
}
]
let j=0
for ( let group of userData ) {let i=0
for ( let student of group.students ) {
if ( student.id === sampleObj.id ) {
console.log('updating student object')
userData[j].students[i] = sampleObj
// student = { ...sampleObj } (another failed attempt)
// userData[group].students[student] = sampleObj (another failed attempt)
} i++;
} j++;
}
console.log('userData', userData)
您永远不会更新实际的用户数据。要更新它,您应该在循环中引用userData对象,而不是用于迭代对象的临时变量 因此,请尝试以下方法:
let sampleObj = { id: 1, name: 'Kelly' }
let userData = [
{
students: [
{ id: 1, name: 'Sandra' }
]
},
{
students: [
{ id: 2, name: 'Jerome' }
]
}
]
let j=0
for ( let group of userData ) {let i=0
for ( let student of group.students ) {
if ( student.id === sampleObj.id ) {
console.log('updating student object')
userData[j].students[i] = sampleObj
// student = { ...sampleObj } (another failed attempt)
// userData[group].students[student] = sampleObj (another failed attempt)
} i++;
} j++;
}
console.log('userData', userData)
数组项替换不是这样工作的。相反,您可以像这样替换student对象的属性
for (let group of userData) {
for (let student of group.students) {
if (student.id === sampleObj.id) {
console.log('updating student object')
student = Object.assign(student, sampleObj);
}
}
}
它将samplObj的所有属性分配给学生对象 数组项替换不能以这种方式工作。相反,您可以像这样替换student对象的属性
for (let group of userData) {
for (let student of group.students) {
if (student.id === sampleObj.id) {
console.log('updating student object')
student = Object.assign(student, sampleObj);
}
}
}
它将samplObj的所有属性分配给学生对象 预期的产出究竟是多少?是否要将找到的学生名称更改为sampleObj的新名称?我希望在找到sampleObj后将整个学生对象替换为sampleObj var student仅位于内部for循环中,因此,UserData不会受到作业的影响。您需要替换group.students中相同索引处的对象。我建议-就像connexo一样,。-您应该使用Array.prototype.forEach,这样您就可以访问数组元素、索引和数组本身?是否要将找到的学生名称更改为sampleObj的新名称?我希望在找到sampleObj后将整个学生对象替换为sampleObj var student仅位于内部for循环中,因此,UserData不会受到作业的影响。您需要替换group.students中相同索引处的对象。我建议-就像connexo一样,。-您应该使用Array.prototype.forEach,这样您就可以访问数组元素、索引和数组本身。谢谢@connexo!好吧,我只是使用了错误类型的for循环。谢谢@connexo!工作得很有魅力。只需切换传递给Object.assignstudent的参数顺序,sampleObj-student-first,sampleObj-second。非常感谢。工作得很有魅力。只需切换传递给Object.assignstudent的参数顺序,sampleObj-student-first,sampleObj-second。非常感谢。