Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新循环内部的Javascript对象属性_Javascript - Fatal编程技术网

更新循环内部的Javascript对象属性

更新循环内部的Javascript对象属性,javascript,Javascript,我试图用另一个看似微不足道的对象更新一个JS对象,但该值没有更新 设sampleObj={ id:1, 姓名:“凯利” } 让用户数据=[{ 学生:[{ id:1, 姓名:“桑德拉” }] }, { 学生:[{ id:2, 名字:“杰罗姆” }] } ] 对于用户数据的let组{ 让学生成为小组的一员{ 如果student.id==sampleObj.id{ console.log“正在更新学生对象” 学生=sampleObj //student={…sampleObj}另一次尝试失败 //u

我试图用另一个看似微不足道的对象更新一个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 } } }
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。非常感谢。