【问题标题】:Extract key value pairs from json object and group them - Javascript从 json 对象中提取键值对并将它们分组 - Javascript
【发布时间】:2019-05-01 08:39:16
【问题描述】:

这是我的小提琴:DEMO1

以下函数提取键和值并将其存储在一个新数组中。这适用于对象(json2 和 json3),而不适用于对象数组(json1)

有没有办法将一组键值对组合成一个对象,然后将该对象推送到数组中? Desired output : [{"timestamp":1540457640,"speed":"70"},{"timestamp":1541383353,"speed":"80"},{"timestamp":1541383353,"speed":"70"},{"timestamp":1542256083,"speed":"70"}]

function iterate(obj) {
  for (var property in obj) {
    if (obj.hasOwnProperty(property)) {
      if (typeof obj[property] == "object") {
        iterate(obj[property]);
        if (isNaN(Number(property))) {
          if ((Array.isArray(obj[property])) && (typeof obj[property][0] != "object")) {
            simpleArrayKeys[property] = obj[property];
          }
        }
      } else {
        if (isNaN(Number(property))) {
          simpleArrayKeys[property] = obj[property];
        }
      }
    }
  }
}

【问题讨论】:

  • 除了嵌套之外,内置函数 Object.keys()、Object.values() 和 Object.entries() 会执行此操作。因此,将它们与 .reduce() 、 .flatten() 和 .map() 结合使用可以让您创建所需的任何转换。
  • @Shilly:如果不同子对象中的键名相同(即所有者和驱动程序对象具有相同的键名),则此变体 jsfiddle.net/inchrvndr/gyujmokk/139 以及进一步的转换也可能无法正常工作

标签: javascript arrays angularjs json angular


【解决方案1】:

你可以像这样映射数据数组:

var output = json1.data.allStreamingData.map(d => {
  return {
    "timestamp": d.timestamp,
    "speed": d.streamData.speed
  }
})

http://jsfiddle.net/fghjtsnm/

【讨论】:

  • 输入的 json 对象可以是任何东西,不是时间戳/速度总是使用建议的返回格式。
  • 什么?所以你想采取任何级别的嵌套并将这些键/值提升到顶级对象?你怎么能确保不会有重复的键?数据是否存在某种程度的结构?
  • 是的,假设是,嵌套结构内不会有任何重复的键和数组,可以有对象。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
相关资源
最近更新 更多