【发布时间】: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