简体   繁体   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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM