【问题标题】:nodejs - convert one obj to some objectsnodejs - 将一个 obj 转换为一些对象
【发布时间】:2021-09-21 08:05:23
【问题描述】:

我有一个从客户那里收到的 obj,

const record = {
    "date":"2021-09-20",
    "startAt":"10:00",
    "endAt":"16:00",
    "employeeId": [5,2],<==
    "projectId":[50,48],<==
    "notes":"blahhh"
}

我想将它转换为一些对象,相同的细节,但我想要例如 employeeId 5 在 50 和 48 两个项目中工作 我想要两个具有相同细节的对象,但 employeeId 为 50,projectId :第一个对象为 50,sec obj 为 48

{
    ....
    "employeeId": [5],<== //first emplyee
    "projectId":[50],<== // first project
    ....
}

{
    ....
    "employeeId": [5],//first emplyee
    "projectId":[48], // sec project
    ...
}

{
    ....
    "employeeId": [2],//sec employee
    "projectId":[50], //first project
    ....
}

{
    ....
    "employeeId": [2],//sec employee
    "projectId":[48], //sec project
    ....
}

谢谢你帮助我

【问题讨论】:

    标签: node.js object


    【解决方案1】:

    你可以这样做:

    const record = {
      date: "2021-09-20",
      startAt: "10:00",
      endAt: "16:00",
      employeeId: [5, 2],
      projectId: [50, 48],
      notes: "blahhh",
    };
    
    const records = record.employeeId
      .map((employeeId) =>
        record.projectId.map((projectId) => ({
          ...record,
          employeeId: [employeeId],
          projectId: [projectId]
        }))
      )
      .flat();
    
    console.log(records);

    【讨论】:

      【解决方案2】:

      1- 提取所有具有数组值的键

      let arrayKeys = Object.entries(record).filter(([key, value]) => typeof value === 'object' && Array.isArray(value))
      

      2- 使用默认键创建默认对象:

      let defaultObj = Object.entries(record).reduce((obj, [key, value]) => {
        if(!typeof value === 'object' || !Array.isArray(value)) {
          obj[key] = value
        }
        return obj;
      }, {})
      

      3- 创建一个函数,以递归方式用最终对象填充数组:

      function addKeys(array, obj, keys) {
        if(!keys.length) {
          array.push(obj);
          return;  
        }
        let [key, values] = keys.pop();
        values.forEach(val => {
          obj[key] = [val];
          addKeys(array, {...obj}, [...keys])
        });
      }
      
      

      完整代码:

      const record = {
          "date":"2021-09-20",
          "startAt":"10:00",
          "endAt":"16:00",
          "employeeId": [5,2],
          "projectId":[50,48, 60, 70],
          "notes":"blahhh",
          "extraArrayKey": ['a', 'b']
      }
      
      let arrayKeys = Object.entries(record).filter(([key, value]) => typeof value === 'object' && Array.isArray(value))
      
      let defaultObj = Object.entries(record).reduce((obj, [key, value]) => {
        if(!typeof value === 'object' || !Array.isArray(value)) {
          obj[key] = value
        }
        return obj;
      }, {})
      
      function addKeys(array, obj, keys) {
        if(!keys.length) {
          array.push(obj);
          return;  
        }
        let [key, values] = keys.pop();
        values.forEach(val => {
          obj[key] = [val];
          addKeys(array, {...obj}, [...keys])
        });
      }
      
      let output = [];
      
      addKeys(output, defaultObj, arrayKeys)  
      
      console.log(output)

      【讨论】:

        猜你喜欢
        • 2021-08-14
        • 2015-02-24
        • 1970-01-01
        • 2017-10-15
        • 2021-11-18
        • 1970-01-01
        • 2011-03-15
        • 2016-08-03
        • 1970-01-01
        相关资源
        最近更新 更多