[英]How to Replace values of a property in an Array Object with values of a property in another Array Object in Javascript
我有一個數組 Object
const admins= [
{
id: 1,
name: 'Admin 1',
},
{
id: 2,
name: 'Admin 2',
},
{
id: 3,
name: 'Admin 3',
}
]
和另一個陣列 Object
const members= [
{
id: 1,
name: 'Name 1',
addedByAdminId: 1
},
{
id: 2,
name: 'Name 2',
addedByAdminId: 2
},
{
id: 3,
name: 'Name 3',
addedByAdminId: 3
}
]
我想用管理員的名字替換成員 arrayObject 的 addedByAdminId 值,其中 admins.id = addedByAdminId
我當前的代碼:
const objectC = members.forEach((item) => item.addedByAdminId= admins.filter(obj => obj.id === item.addedByAdminId)[0]['name']);
預期結果:
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'
}
]
我得到的錯誤:未捕獲的類型錯誤:無法讀取未定義的屬性(讀取“名稱”)
我正在使用反應。
歡迎來到stackoverflow。
這就是你想要做的:
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}
});
結果
[
{
"id": 1,
"name": "Name 1",
"addedByAdminId": "Admin 1"
},
{
"id": 2,
"name": "Name 2",
"addedByAdminId": "Admin 2"
},
{
"id": 3,
"name": "Name 3",
"addedByAdminId": "Admin 3"
}
]
但這就是我的建議:不要用與該變量名不匹配的值覆蓋變量,而是創建一個新變量。
代碼:
const newMembers = members.map(member => {
const adminName = admins.find(it => it.id === member.addedByAdminId)?.name;
return {...member, addedByAdminName: adminName}
});
結果
[
{
"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"
}
]
就這樣?
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)
當管理數組中存在匹配記錄時,這將用名稱替換 addedByAdminId。 如果沒有找到與 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.