使用下划线重构 JSON

Using Underscore restructure the JSON

原版JSON

    var dataJson = [{
      "MID" : "NTE",
      "TNAME" : "gGAR",
      "MVALUE" : 6
    }, {
      "MID" : "NTP",
      "TNAME" : "gGAR",
      "MVALUE" : 50
    }, {
      "MID" : "NTR",
      "TNAME" : "gGAR",
      "MVALUE" : 12
    }, {
      "MID" : "NTE",
      "TNAME" : "gRRR",
      "MVALUE" : 1
    }, {
      "MID" : "NTP",
      "TNAME" : "gRRR",
      "MVALUE" : 100
    }, {
      "MID" : "NTR",
      "TNAME" : "gRRR",
      "MVALUE" : 1
    }];

需要按 "TNAME" 进行分组,最后分组根据 "MID" 获取前三个对象并修改 JSON 结构,如

预期输出JSON:

        var Convert = [
        {
            "GGARMVALUENTE":6,
            "GGARMVALUENTP":50,
            "GGARMVALUENTR":12,
            "GRRRMVALUENTE":1,
            "GRRRMVALUENTP":100,
            "GRRRMVALUENTR":1
        }
    ]

终于按照您的要求运行了。刚刚解决了令人费解的问题。 :)

function restructure (data) {
  let convert = []
  let buffer = null
  let pairs = data.map(d => {
    return [`${d.TNAME.toUpperCase()}MVALUE${d.MID}`, d.MVALUE] 
  })
  pairs.forEach((p, i) => {
    let name = p.shift()
    let value = p.shift()
    let pair = {
      [name]: value
    }
    if (buffer && buffer[name]) {
      convert.push(buffer)
      delete buffer
      buffer = pair
    } else {
      if (buffer) {
        Object.assign(buffer, pair)
      } else {
        buffer = pair
      }
      if (pairs.length === i + 1) {
        convert.push(buffer)
        delete buffer
      }
    }
  })
  return convert
}

console.log(restructure(dataJson))