从数组对象获取属性的最有效方法是什么?

What is the most efficient way to get properties from an array object?

我想收集存储在每个对象中的名字(Jenny、Tiffany 等)。这些对象存在于一个数组中。我用过 Array.prototype.every()Array.prototype.forEach(),但我认为它们不是正确的方法。

我还想指出,这些代码中的大部分来自 Codaffection。我正在练习使用 React 进行开发。

如果您想试验代码,click here

在每个对象中,都有一个 ID、全名、电子邮件等

这是为每个员工添加、编辑、生成唯一 ID 并获取所有存储数据的代码。

const KEYS = {
    employees: 'employees',
    employeeId: 'employeeId'
}

export function insertEmployee(data) {
    let employees = getAllEmployees();
    data['id'] = generateEmployeeId()
    employees.push(data)
    localStorage.setItem(KEYS.employees, JSON.stringify(employees))
}

export function updateEmployee(data) {
    let employees = getAllEmployees();
    let recordIndex = employees.findIndex(x => x.id == data.id);
    employees[recordIndex] = { ...data }
    localStorage.setItem(KEYS.employees, JSON.stringify(employees));
}

export function generateEmployeeId() {
    if (localStorage.getItem(KEYS.employeeId) == null)
        localStorage.setItem(KEYS.employeeId, '0')
    var id = parseInt(localStorage.getItem(KEYS.employeeId))
    localStorage.setItem(KEYS.employeeId, (++id).toString())
    return id;
}

export function getAllEmployees() {
    if (localStorage.getItem(KEYS.employees) == null)
        localStorage.setItem(KEYS.employees, JSON.stringify([]))
    let employees = JSON.parse(localStorage.getItem(KEYS.employees));
    //map departmentID to department title
    let departments = getDepartmentCollection();
    return employees.map(x => ({
        ...x,
        department: departments[x.departmentId - 1].title
    }))
}

这是添加和更新新员工的方式。

const [records, setRecords] = useState(employeeService.getAllEmployees());

const addOrEdit = (employee, resetForm) => {
    if (employee.id == 0) employeeService.insertEmployee(employee);
    else employeeService.updateEmployee(employee);
    resetForm();
    setRecords(employeeService.getAllEmployees());
}

这是输入值和触发 addOrEdit 函数的方式。

const initialFValues = {
  id: 0,
  fullName: "",
  email: "",
  mobile: "",
  city: "",
  gender: "male",
  departmentId: "",
  hireDate: new Date(),
  isPermanent: false
};

<Controls.Input
  name="fullName"
  label="Full Name"
  value={values.fullName}
/>
<Controls.Input
  label="Email"
  name="email"
  value={values.email}
/>
<Controls.Input
  label="Mobile"
   name="mobile"
  value={values.mobile}

/>

<Controls.Button type="submit" text="Submit" />

const handleSubmit = (e) => {
    e.preventDefault();
    if (validate()) {
      addOrEdit(values, resetForm);
    }
};

这就是我试图捕捉名字的方式:Jenny、Tiffany 等

const listOfNames = () => {
    var nameList = employeeService.getAllEmployees();
    var eachName = nameList.forEach(employee.fullName); // <- This is the problem.
    console.log("List of Employees: ", nameList);
};

如果您想试验代码,click here

您的意思是使用 map 而不是 forEach

const listOfNames = () => {
    var nameList = employeeService.getAllEmployees();
    var eachName = nameList.map(employee => employee.fullName);
    console.log("List of Employees: ", eachName);
};

这应该可以解决。 :)