首页 > 解决方案 > 在 JavaScript ForEach 中更新迭代数组

问题描述

用年轻的员工替换 > 50 岁的员工。

我正在尝试更新我正在forEach()处理的数组中的一个项目。分配current失败,同时注意并在块工作index后替换项目。forEach()请解释这种行为?

var youngerEmployee = {
  name: {
    first: 'B',
    last: 'C'
  },
  age: 25
}

var employees = [
  {
    name: {
      first: 'X',
      last: 'Y'
    },
    age: 45
  },
  {
    name: {
      first: 'A',
      last: 'B'
    },
    age: 54
  }
];

/* --- Failed approach --- */

employees.forEach(

  (employee) => {

    if(employee.age > 50) {

      employee = youngerEmployee;

    }

  }

);

console.log(employees);

/* --- Successful approach --- */

var i = -1;

employees.forEach(

  (employee, index) => {

    if(employee.age > 50) {

      i = index;

    }

  }

);

employees[i] = youngerEmployee;

console.log(employees);

JSBin

标签: javascript

解决方案


在您的“失败方法”中,employees数组没有改变,因为employee引用了数组中的当前员工。通过分配employee = youngerEmployee,您可以更改引用,否则employees数组不会受到影响。


推荐阅读