我正在尝试转换一个可能具有不同嵌套级别的对象:
const obj = {
some: {
thing: {
good: 'yo'
},
one: 'else'
},
something: {
bad: 'oy'
},
somethingtasty: 'mmm'
}
放入包含值的原始路径和值的对象数组:
const arr = [{
path: 'some.thing.good',
value: 'yo'
}, {
path: 'some.one',
value: 'else
}, {
path: 'something.bad',
value: 'oy'
}, {
path: 'somethingtasty',
value: 'mmm'
}]
对于类似的问题,我发现了一个有用的答案,该问题涉及不同嵌套的对象:
https://stackoverflow.com/a/2631198
但这不能解决
我还尝试查看lodash是否具有一个或多个可以帮助像这样的方法:
https://github.com/node4good/lodash-contrib/blob/master/docs/_.object.selectors.js.md#getpath
要么:
https://lodash.com/docs/4.17.11#flatMapDeep
但是,如果我不知道需要获取的值的路径,这将无济于事。
javascript中是否有办法递归遍历对象并将其键和值保存在数组中?
您可以使用reduce
方法来创建递归函数。
const obj = {"some":{"thing":{"good":"yo"},"one":"else"},"something":{"bad":"oy"},"somethingtasty":"mmm"}
function paths(obj, prev = "") {
return Object.keys(obj).reduce((r, e) => {
const path = prev + (prev ? '.' + e : e);
const value = obj[e];
if (typeof value == 'object') {
r.push(...paths(value, path))
} else {
r.push({path,value})
}
return r
}, [])
}
const result = paths(obj)
console.log(result)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句