[英]How to Replace values of a property in an Array Object with values of a property in another Array Object in Javascript
I have an Array Object我有一个数组 Object
const admins= [
{
id: 1,
name: 'Admin 1',
},
{
id: 2,
name: 'Admin 2',
},
{
id: 3,
name: 'Admin 3',
}
]
and another Array Object和另一个阵列 Object
const members= [
{
id: 1,
name: 'Name 1',
addedByAdminId: 1
},
{
id: 2,
name: 'Name 2',
addedByAdminId: 2
},
{
id: 3,
name: 'Name 3',
addedByAdminId: 3
}
]
I want to replace values of addedByAdminId of member arrayObject by names of admins where admins.id = addedByAdminId我想用管理员的名字替换成员 arrayObject 的 addedByAdminId 值,其中 admins.id = addedByAdminId
My Current Code:我当前的代码:
const objectC = members.forEach((item) => item.addedByAdminId= admins.filter(obj => obj.id === item.addedByAdminId)[0]['name']);
Expected Result:预期结果:
objectC = [
{
id: 1,
name: 'Name 1',
addedByAdminId: 'Admin 1'
},
{
id: 2,
name: 'Name 2',
addedByAdminId: 'Admin 2'
},
{
id: 3,
name: 'Name 3',
addedByAdminId: 'Admin 3'
}
]
Error I am Getting: Uncaught TypeError: Cannot read properties of undefined (reading 'name')我得到的错误:未捕获的类型错误:无法读取未定义的属性(读取“名称”)
I am using React.我正在使用反应。
Welcome to stackoverflow.欢迎来到stackoverflow。
This is what you want to do:这就是你想要做的:
const newMembers = members.map(member => {
// get the admin name
const adminName = admins.find(it => it.id === member.addedByAdminId)?.name;
// create a new object with the spread operator
// containing everything from the memmber object
// overriding the property addedByAdminId with the variable adminName
return {...member, addedByAdminId: adminName}
});
Result结果
[
{
"id": 1,
"name": "Name 1",
"addedByAdminId": "Admin 1"
},
{
"id": 2,
"name": "Name 2",
"addedByAdminId": "Admin 2"
},
{
"id": 3,
"name": "Name 3",
"addedByAdminId": "Admin 3"
}
]
But this is what i suggest: Instead of overriding a variable with a value that doesn't match this variable name just create a new one.但这就是我的建议:不要用与该变量名不匹配的值覆盖变量,而是创建一个新变量。
Code:代码:
const newMembers = members.map(member => {
const adminName = admins.find(it => it.id === member.addedByAdminId)?.name;
return {...member, addedByAdminName: adminName}
});
Result结果
[
{
"id": 1,
"name": "Name 1",
"addedByAdminId": 1,
"addedByAdminName": "Admin 1"
},
{
"id": 2,
"name": "Name 2",
"addedByAdminId": 2,
"addedByAdminName": "Admin 2"
},
{
"id": 3,
"name": "Name 3",
"addedByAdminId": 3,
"addedByAdminName": "Admin 3"
}
]
So like this?就这样?
const admins = [ { id: 1, name: 'Admin 1', }, { id: 2, name: 'Admin 2', }, { id: 3, name: 'Admin 3', } ] const members = [ { id: 1, name: 'Name 1', addedByAdminId: 1 }, { id: 2, name: 'Name 2', addedByAdminId: 2 }, { id: 3, name: 'Name 3', addedByAdminId: 3 } ] const objC = members.map(({ id, name, addedByAdminId }) => ({ id, name, addedByAdminId: admins[addedByAdminId - 1].name })) console.log(objC)
this will replace addedByAdminId with the name when a matching record is present in admin array.当管理数组中存在匹配记录时,这将用名称替换 addedByAdminId。 if there is no matching record found to the addedByAdminId, the addedByAdminId will be not replaced.如果没有找到与 addedByAdminId 匹配的记录,则不会替换 addedByAdminId。
{
id: 1,
name: 'Admin 1',
},
{
id: 2,
name: 'Admin 2',
},
{
id: 3,
name: 'Admin 3',
}
]
const members = [
{
id: 1,
name: 'Name 1',
addedByAdminId: 1
},
{
id: 2,
name: 'Name 2',
addedByAdminId: 2
},
{
id: 3,
name: 'Name 3',
addedByAdminId: 3
},
{
id: 4,
name: 'Name 4',
addedByAdminId: 4
}
]
const result = members.map(({ id, name, addedByAdminId }) => ({
id,
name,
addedByAdminId: admins.some(admin => admin.id === addedByAdminId) ? admins.find(admin => admin.id === addedByAdminId).name : addedByAdminId
}))
console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.