【问题标题】:How do I insert array value into object?如何将数组值插入对象?
【发布时间】:2019-09-05 17:23:44
【问题描述】:

我想创建一个带有嵌套数组的对象,看起来像这样:

[{"name":"Joe","role":["Admin","Developer"]},{"name":"Sherry","role":["Analyst","QA-tester"]}]

我希望能够做一些事情,比如找到 Sherry 的角色数组并向该数组添加更多值。我该怎么办?

employees = [];

// [*query database for names and associated roles*]

employees.push({name: exampleVar1,role:exampleVar2});

预期结果:我想存储可用于插入与员工关联的角色的名称。然后稍后将此对象用作参考。

【问题讨论】:

  • 好的,有什么问题?
  • 问题是向 Sherry 或 Joe 添加其他角色。

标签: javascript arrays object nested


【解决方案1】:

您可以使用Array.find(....) 查找要添加角色的对象,这里是一个示例:

const arr = [{"name":"Joe","role":["Admin","Developer"]},{"name":"Sherry","role":["Analyst","QA-tester"]}]


const nameToFind = 'Sherry';
const newRole = 'Admin';

const found = arr.find(({ name }) => name === nameToFind);
if (found) {
  found.role.push(newRole);
}

console.log(arr);

【讨论】:

    【解决方案2】:

    假设你的名字是独一无二的,我会使用 Map 来表示这种事情。

    const data = [{ name: 'Joe', role: ['Admin', 'Developer'] }, { name: 'Sherry', role: ['Analyst', 'QA-tester'] }]
    
    /// create your Map
    const dataMap = new Map()
    data.forEach(d => dataMap.set(d.name, d.role))
    

    使用get 访问角色,并将名称作为您的密钥:

    const roles = dataMap.get('Sherry')
    

    然后您可以pushpop 角色进入或退出返回的数组。

    如果您不想使用Map,那么另一种map 也可以:

    const data = [{ name: 'Joe', role: ['Admin', 'Developer'] }, { name: 'Sherry', role: ['Analyst', 'QA-tester'] }]
    
    const updatedData = (nameToUpdate, newRole) =>
     data.map(d => d.name === nameToUpdate? {...d,role: [...d.role, newRole]}:d)
    

    【讨论】:

      【解决方案3】:

      您可以使用一个函数来查找员工(或创建它,如果没有找到),添加角色并确保不会添加角色(如果已经存在):

      function addRoles(employees, name, role) {
        let match = employees.find(e => e.name === name);
        if (match) {
          match.role = [...new Set(match.role.concat(role))];
        } else {
          match = { name, role };
        }
        return match;
      }
      
      let employees = [{"name":"Joe","role":["Admin","Developer"]},{"name":"Sherry","role":["Analyst","QA-tester"]}];
      
      let result = addRoles(employees, "Sherry", ["Manager", "QA-tester"]);
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-05
        • 2020-05-28
        • 1970-01-01
        相关资源
        最近更新 更多