簡體   English   中英

如何將數組 Object 中的屬性值替換為 Javascript 中另一個數組 Object 中的屬性值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM