【问题标题】:how to merge multidimensional objects in array without altering the objects inside objects如何在不改变对象内部的对象的情况下合并数组中的多维对象
【发布时间】:2018-03-25 20:44:44
【问题描述】:

您好 :) 我需要以下方面的帮助:

我有这个:

[{"Condenser /Heat Pump":{"2":299,"starttime":"10/05/17","productClass":"Condenser /Heat Pump"}},
{"Condenser /Heat Pump":{"1":2529,"2":2270,"starttime":"10/06/17","productClass":"Condenser /Heat Pump"}},
{"Coorporate Coils":{"2":104,"3":216,"starttime":"10/05/17","productClass":"Coorporate Coils"}},
{"Coorporate Coils":{"1":1107,"2":811,"3":0,"starttime":"10/06/17","productClass":"Coorporate Coils"}}]

我想这样得到它:

[{"Condenser /Heat Pump":{"2":299,"starttime":"10/05/17","productClass":"Condenser /Heat Pump"},{"1":2529,"2":2270,"starttime":"10/06/17","productClass":"Condenser /Heat Pump"}},{"Coorporate Coils":{"2":104,"3":216,"starttime":"10/05/17","productClass":"Coorporate Coils"},{"1":1107,"2":811,"3":0,"starttime":"10/06/17","productClass":"Coorporate Coils"}}]

我一直在尝试找到一种方法来做到这一点,但不幸的是我没能做到。到目前为止,我只能做一些非常不灵活的事情:

var hp=[];
var cc=[];

for(i=0; i<mergedProductClasses.length; i++){
    Object.getOwnPropertyNames(mergedProductClasses[i]).forEach(
       function (val, idx, array) {
         if(val =="Condenser /Heat Pump"){
            hp.push(mergedProductClasses[i]["Condenser /Heat Pump"])
         }else if(val =="Coorporate Coils"){
           cc.push(mergedProductClasses[i]["Coorporate Coils"])
         }
       }
     )
 }

这有点工作......它给了我一些可以使用的东西但是我有多个“vals”所以如果我添加一个新的,我将不得不每次都编辑我的代码来添加那个异常......我想看看是否有一种方法可以更有效地做到这一点......而且我知道我目前的方法并不能完全满足我的需求,但这种格式允许我用数据做我需要的事情。对不起,如果这太基本了 x_x

我试过这个Merge duplicate multidimensional objects in array of objects,但这种方法合并了我所有的对象而不考虑日期,我关心日期。

【问题讨论】:

    标签: javascript arrays object merge


    【解决方案1】:

    不要使用硬编码的键,而是创建一个包含键的数组,并检查该对象是否已存在于该数组中。

    这段代码可能不是你要找的,但应该让你明白我在说什么:

    var products = [{
        "Condenser /Heat Pump": {
          "2": 299,
          "starttime": "10/05/17",
          "productClass": "Condenser /Heat Pump"
        }
      },
      {
        "Condenser /Heat Pump": {
          "1": 2529,
          "2": 2270,
          "starttime": "10/06/17",
          "productClass": "Condenser /Heat Pump"
        }
      },
      {
        "Coorporate Coils": {
          "2": 104,
          "3": 216,
          "starttime": "10/05/17",
          "productClass": "Coorporate Coils"
        }
      },
      {
        "Coorporate Coils": {
          "1": 1107,
          "2": 811,
          "3": 0,
          "starttime": "10/06/17",
          "productClass": "Coorporate Coils"
        }
      }
    ]
    
    var merged = {};
    var output = document.getElementById("output")
    
    for (var i = 0; i < products.length; i++ ) {
      Object.getOwnPropertyNames(products[i]).forEach(function(val, idx, array) {
        if (typeof(merged[val]) == "undefined") merged[val] = []
        merged[val].push(products[i][val])
      })
    }
    
    output.innerText = JSON.stringify(merged, undefined, 2)
    <pre id="output">
    </pre>

    【讨论】:

      【解决方案2】:

      这花了很长时间。这就是你要找的东西:

      const units = [{"Condenser /Heat Pump":{"2":299,"starttime":"10/05/17","productClass":"Condenser /Heat Pump"}},
      {"Condenser /Heat Pump":{"1":2529,"2":2270,"starttime":"10/06/17","productClass":"Condenser /Heat Pump"}},
      {"Coorporate Coils":{"2":104,"3":216,"starttime":"10/05/17","productClass":"Coorporate Coils"}},
      {"Coorporate Coils":{"1":1107,"2":811,"3":0,"starttime":"10/06/17","productClass":"Coorporate Coils"}}]
      
      const objKey = obj => Object.keys(obj)[0]
      const objValue = obj => Object.values(obj)[0]
      newObj = {}
      let unitName
      for (let unit of units) {
        unitName = objKey(unit)
        newObj[unitName] = []
      }
      let unitData
      for (let unit of Object.values(units)) {
        unitData = objValue(unit)
        newObj[objKey(unit)].push(unitData)
      }
      console.log(newObj)
      

      【讨论】:

        猜你喜欢
        • 2018-03-14
        • 2021-04-14
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        • 2019-03-16
        • 1970-01-01
        相关资源
        最近更新 更多