如果用户存在于 users 数组中,请编写一个 editUser 函数?
Write a function which editUser if the user exist in the users array?
我正在使用带有三元运算符的 array.map 高阶函数来检查条件。我对方法不熟悉Object.assign
我尝试了问题的解决方案,但在控制台没有给出return,请验证并纠正我的方法。
const users = [
{
name:'Brook',
scores:75,
skills:['HTM', 'CSS', 'JS'],
age:16
},
{
name:'Alex',
scores:80,
skills:['HTM', 'CSS', 'JS'],
age:18
},
{
name:'David',
scores:75,
skills:['HTM', 'CSS'],
age:22
},
{
name:'John',
scores:85,
skills:['HTM'],
age:25
},
{
name:'Sara',
scores:95,
skills:['HTM', 'CSS', 'JS'],
age: 26
},
{
name:'Martha',
scores:80,
skills:['HTM', 'CSS', 'JS'],
age:18
},
{
name:'Thomas',
scores:90,
skills:['HTM', 'CSS', 'JS'],
age:20
}
]
我的解决方案:(NodeJS)
const editUser = (users, userUpdate) => {
return users.map((user) => user.name == userUpdate ? Object.assign(user, { scores: userUpdate.scores, skills: userUpdate.skills, age: userUpdate.age }) : user);
}
执行:
const userUpdate = {
name: 'Alex',
scores: 88,
skills: ['HTM', 'CSS', 'JS', 'FullStack'],
age: 20
}
console.log(editUser(users, userUpdate));
userUpdate 是包含名称 属性 的对象,必须 user.name 与 userUpdate.name
在这个问题中,你将对象与名称进行比较,但不相等。
const editUser = (users, userUpdate) => {
return users.map((user) => user.name == userUpdate.name ? Object.assign(user, { scores: userUpdate.scores, skills: userUpdate.skills, age: userUpdate.age }) : user);
};
您可以使用 Array.prototype.findIndex() 在 userUpdate.name
数组中获取用户的 index
- 优点是在用户多的情况下,找到用户后搜索会立即停止
因此,如果 index
大于 0
,您可以修改该用户
代码:
const users = [{name: 'Brook',scores: 75,skills: ['HTM', 'CSS', 'JS'],age: 16,},{name: 'Alex',scores: 80,skills: ['HTM', 'CSS', 'JS'],age: 18,},{name: 'David',scores: 75,skills: ['HTM', 'CSS'],age: 22,},{name: 'John',scores: 85,skills: ['HTM'],age: 25,},{name: 'Sara',scores: 95,skills: ['HTM', 'CSS', 'JS'],age: 26,},{name: 'Martha',scores: 80,skills: ['HTM', 'CSS', 'JS'],age: 18,},{name: 'Thomas',scores: 90,skills: ['HTM', 'CSS', 'JS'],age: 20,}]
const userUpdate = {
name: 'Alex',
scores: 88,
skills: ['HTM', 'CSS', 'JS', 'FullStack'],
age: 20,
}
const editUser = (users, userUpdate) => {
const index = users.findIndex((u) => u.name === userUpdate.name)
if (index > 0) {
users[index] = userUpdate
}
return users
}
const result = editUser(users, userUpdate)
console.log(result)
我们有时使用 object.asign()
在 JavaScript 中克隆一个对象(没有引用)
let user = { name: 'Alex'}
let newUser = user;
newUser.name = 'John';
console.log(newUser); //{ name: 'John' }
console.log(user); // { name: 'John' }
如果您想克隆一个没有引用的对象,您可以使用 Object.assign()
或 three dots (...)
在 Javascript
中调用 spread operator
我更喜欢three dots
,因为它是ECS6的特性。
使用Object.assign()
:
let user = { name: 'Alex'}
let newUser = Object.assign({}, user);
newUser.name = 'John';
console.log(newUser);// { name: 'John' }
console.log(user);//{ name: 'Alex' }
使用three dots (...)
或spread operator
let user = { name: 'Alex'}
let newUser = {...user};
newUser.name = 'John';
console.log(newUser); // { name: 'John' }
console.log(user); //{ name: 'Alex' }
您可以访问此 tutorial 以获取更多示例
要使用 Object.assign()
或 'sperate operator' 合并对象,请检查此 tutorial
回答你的问题是:
我认为你不需要 Object.assign()
因为 users
和 userUpdated
的键是相似的所以就这样试试:
const editUser = (users, userUpdate) => {
return users.map((user) => user.name == userUpdate.name ? userUpdate: user);
};
我正在使用带有三元运算符的 array.map 高阶函数来检查条件。我对方法不熟悉Object.assign
我尝试了问题的解决方案,但在控制台没有给出return,请验证并纠正我的方法。
const users = [
{
name:'Brook',
scores:75,
skills:['HTM', 'CSS', 'JS'],
age:16
},
{
name:'Alex',
scores:80,
skills:['HTM', 'CSS', 'JS'],
age:18
},
{
name:'David',
scores:75,
skills:['HTM', 'CSS'],
age:22
},
{
name:'John',
scores:85,
skills:['HTM'],
age:25
},
{
name:'Sara',
scores:95,
skills:['HTM', 'CSS', 'JS'],
age: 26
},
{
name:'Martha',
scores:80,
skills:['HTM', 'CSS', 'JS'],
age:18
},
{
name:'Thomas',
scores:90,
skills:['HTM', 'CSS', 'JS'],
age:20
}
]
我的解决方案:(NodeJS)
const editUser = (users, userUpdate) => {
return users.map((user) => user.name == userUpdate ? Object.assign(user, { scores: userUpdate.scores, skills: userUpdate.skills, age: userUpdate.age }) : user);
}
执行:
const userUpdate = {
name: 'Alex',
scores: 88,
skills: ['HTM', 'CSS', 'JS', 'FullStack'],
age: 20
}
console.log(editUser(users, userUpdate));
userUpdate 是包含名称 属性 的对象,必须 user.name 与 userUpdate.name
在这个问题中,你将对象与名称进行比较,但不相等。
const editUser = (users, userUpdate) => {
return users.map((user) => user.name == userUpdate.name ? Object.assign(user, { scores: userUpdate.scores, skills: userUpdate.skills, age: userUpdate.age }) : user);
};
您可以使用 Array.prototype.findIndex() 在 userUpdate.name
index
- 优点是在用户多的情况下,找到用户后搜索会立即停止
因此,如果 index
大于 0
代码:
const users = [{name: 'Brook',scores: 75,skills: ['HTM', 'CSS', 'JS'],age: 16,},{name: 'Alex',scores: 80,skills: ['HTM', 'CSS', 'JS'],age: 18,},{name: 'David',scores: 75,skills: ['HTM', 'CSS'],age: 22,},{name: 'John',scores: 85,skills: ['HTM'],age: 25,},{name: 'Sara',scores: 95,skills: ['HTM', 'CSS', 'JS'],age: 26,},{name: 'Martha',scores: 80,skills: ['HTM', 'CSS', 'JS'],age: 18,},{name: 'Thomas',scores: 90,skills: ['HTM', 'CSS', 'JS'],age: 20,}]
const userUpdate = {
name: 'Alex',
scores: 88,
skills: ['HTM', 'CSS', 'JS', 'FullStack'],
age: 20,
}
const editUser = (users, userUpdate) => {
const index = users.findIndex((u) => u.name === userUpdate.name)
if (index > 0) {
users[index] = userUpdate
}
return users
}
const result = editUser(users, userUpdate)
console.log(result)
我们有时使用 object.asign()
在 JavaScript 中克隆一个对象(没有引用)
let user = { name: 'Alex'}
let newUser = user;
newUser.name = 'John';
console.log(newUser); //{ name: 'John' }
console.log(user); // { name: 'John' }
如果您想克隆一个没有引用的对象,您可以使用 Object.assign()
或 three dots (...)
在 Javascript
spread operator
我更喜欢three dots
,因为它是ECS6的特性。
使用Object.assign()
:
let user = { name: 'Alex'}
let newUser = Object.assign({}, user);
newUser.name = 'John';
console.log(newUser);// { name: 'John' }
console.log(user);//{ name: 'Alex' }
使用three dots (...)
或spread operator
let user = { name: 'Alex'}
let newUser = {...user};
newUser.name = 'John';
console.log(newUser); // { name: 'John' }
console.log(user); //{ name: 'Alex' }
您可以访问此 tutorial 以获取更多示例
要使用 Object.assign()
或 'sperate operator' 合并对象,请检查此 tutorial
回答你的问题是:
我认为你不需要 Object.assign()
因为 users
和 userUpdated
的键是相似的所以就这样试试:
const editUser = (users, userUpdate) => {
return users.map((user) => user.name == userUpdate.name ? userUpdate: user);
};