从数组对象获取属性的最有效方法是什么?
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);
};
这应该可以解决。 :)
我想收集存储在每个对象中的名字(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);
};
这应该可以解决。 :)