【问题标题】:How to map / merge differently structured objects如何映射/合并不同结构的对象
【发布时间】:2019-10-25 06:48:57
【问题描述】:

总结:

我需要将Students 中的值插入到Employees 对应的值中,以便Students 值出现在与Employees['avg_rate' and 'expense'] 相同的数组中;

新的或修改后的对象数组应在日期和部门(例如 00_Infants)上匹配,然后排除学生和员工中不存在的部门。

谢谢。


// "Students" aka "attendance values by department"
Object
    0:
        00_Infants: 30
        01_Ones: 35
        02_Twos: 39
        03_Threes: 38
        04_Fours: 21
        05_School_Age: 0
        key: "10-10-2019"
        __proto__: Object
    1: {key: "10-11-2019", 00_Infants: 33, 01_Ones: 35, 02_Twos: 36, …}
    2: {key: "10-14-2019", 00_Infants: 30, 01_Ones: 33, 02_Twos: 40, …}

// "employees"
Array(12)
    0:
        key: "10-10-2019"
        values: Array(11)
            0:
                key: "00_Infants"
                value:
                    avg_rate: 13.236842105263158
                    expense: 764.1350000000001
                    __proto__: Object
                    __proto__: Object
            1: {key: "01_Ones", value: {…}}
            2: {key: "02_Twos", value: {…}}
            3: {key: "03_Threes", value: {…}}
            4: {key: "04_Fours", value: {…}}
            5: {key: "06_Floater", value: {…}}
            6: {key: "07_Office", value: {…}}
            7: {key: "08_Administration", value: {…}}
            8: {key: "09_Director", value: {…}}
            9: {key: "12_Kitchen", value: {…}}
            10: {key: "13_Unknown", value: {…}}
            length: 11
            __proto__: Array(0)
            __proto__: Object
    1: {key: "10-11-2019", values: Array(10)}
    2: {key: "10-14-2019", values: Array(9)}

期望的结果:

{
    Date:"10-09-2019"{
        00_Infants: {
            avg_rate:     13.39,
            expense:     776.58,
            attendance:   28
        },
        01_Ones: {
            avg_rate:     13.31,
            expense:     716.58,
            attendance:   33
        },
},        
{   // for each date
    Date:"10-10-2019"{ 
    // for each department ^
    }
}

【问题讨论】:

  • 请添加您喜欢计算的内容。举个例子和结果。顺便说一句,为什么不使用计数属性数组?
  • @NinaScholz 嗨 Nina - 感谢您的评论。 “为什么不使用计数属性数组?” --- 我缺乏知识和技能;我希望我让这件事变得比应该做的要困难得多。但是,我被卡住了。
  • @KSails - 您在所需结果中添加了attendance: 28,您是如何获得该值的?通过添加students 数组项值?另外,您可以发布studentsemployees 的示例JSON 数据吗?目前尚不清楚它们是数组还是对象。我怀疑它们是数组,但想确认一下。
  • @Nikhil - 感谢您查看。 attendance: 28 ... 通过将 students 值添加到“员工”数组中来更正。更新了 studentsemployees 的 JSON 数据
  • 请执行JSON.stringify(data, 0, 4) 并获取问题的格式化数据。由于冗余信息和索引等更多信息,控制台视图的副本虚拟不可用。请添加想要的结果以及数据。

标签: javascript arrays json d3.js


【解决方案1】:
  • Object.values() 可用于获取 students 对象的值,forEach() 可用于迭代这些值。
  • find() 方法可用于在employees 数组中找到匹配日期的员工。
  • 然后对于学生对象项中的每个值,可以使用find() 查找员工对象中的部门,并可以添加具有适当值的attendance 属性。

代码:

Object.values(students).forEach(([key, value]) => {
  let employee = employees.find(obj => obj.key === value.key);

  if (employee) {
    Object.entries(value).forEach(([k, v]) => {
      if (k !== "key") {
        let dept = employee.values.find(dept => dept.key === k);

        if (dept) {
          dept.value.attendance = v;
        }
      }
    });
  }
});

【讨论】:

  • 感谢@Nikhil - 我能够用你的解决方案解决这个问题。
猜你喜欢
  • 2021-12-27
  • 2017-04-11
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2021-12-17
相关资源
最近更新 更多