【问题标题】:How to Replace values of a property in an Array Object with values of a property in another Array Object in Javascript如何用Javascript中另一个数组对象中的属性值替换数组对象中的属性值
【发布时间】:2022-08-18 22:17:41
【问题描述】:

我有一个数组对象

    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
    }
]

我想用管理员的名字替换成员 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\'
    }
]

我得到的错误: 未捕获的类型错误:无法读取未定义的属性(读取 \'name\')

我正在使用反应。

  • 它对我有用。 Example。注意:forEach 返回undefined,因此您的objectC 未定义,members 已就地修改

标签: javascript reactjs arrays object


【解决方案1】:

就这样?

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)

【讨论】:

    【解决方案2】:

    欢迎来到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"
        }
    ]
    

    【讨论】:

      猜你喜欢
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2013-12-02
      • 2015-03-31
      • 2019-07-16
      相关资源
      最近更新 更多