如何将键路径数组返回到嵌套javascript对象中的值?

如何将键路径数组返回到嵌套javascript对象中的值?,javascript,arrays,object,recursion,nested,Javascript,Arrays,Object,Recursion,Nested,我正在尝试变换一个对象,该对象可能具有不同的嵌套级别: const obj = { some: { thing: { good: 'yo' }, one: 'else' }, something: { bad: 'oy' }, somethingtasty: 'mmm' } 进入包含值的原始路径和值的对象数组: const arr = [{ path:

我正在尝试变换一个对象,该对象可能具有不同的嵌套级别:

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'
    }]
对于处理不同嵌套度对象的类似问题,我发现了一个有用的答案:

但这并不能解决问题

  • a:如何处理可变嵌套深度
  • b:如何处理可变键
我还试着看看lodash是否有一种(或多种)方法可以帮助我,比如:

或:

但是,如果我不知道需要获取的值的路径,这就没有帮助


javascript中有没有一种方法可以递归遍历对象并将其键和值保存在数组中?

一种可能的方法是递归遍历
对象。条目

const obj={
一些:{
事情:{
好:“哟”
},
一:“其他人”
},
一些东西:{
坏:“oy”
},
好吃的东西:“嗯”
};
const getNested=(对象、过程)=>{
常量[prop,value]=对象项(obj)[0];
推进(支撑);
如果(值的类型==='object'){
返回getNested(值,propArr);
}
返回{path:propArr.join('.'),value};
};
const arr=对象条目(obj)
.map([top,value])=>
typeof value=='object'?getNested(obj,[top]):({path:top,value})
);

控制台日志(arr)
您可以使用
reduce
方法来创建递归函数

const obj={“some”:{“thing”:{“good”:“yo”},“one”:“else”},“something”:{“bad”:“oy”},“something tasty”:“mmm”}
功能路径(obj,prev=”“){
返回Object.keys(obj).reduce((r,e)=>{
常量路径=上一个+(上一个?'.+e:e);
常量值=对象[e];
如果(值的类型=='object'){
r、 推送(…路径(值,路径))
}否则{
r、 推送({path,value})
}
返回r
}, [])
}
常量结果=路径(obj)

log(result)
您可以采用迭代和递归的方法

函数getPaths(对象,临时=“”){ 返回对象 .条目(对象) .减少( (r,[键,值]=> (path=>r.concat(value&&typeof value==='object' ?获取路径(值、路径) :{path,value}) (temp+(temp&&“)+键), [] ); } const obj={some:{thing:{good'yo'},one'else'},something:{bad'oy'},something tasty'mmm'}; console.log(getpaths(obj))
.as控制台包装{最大高度:100%!重要;顶部:0;}
const obj={
一些:{
事情:{
好:“哟”
},
一:“其他人”
},
一些东西:{
坏:“oy”
},
好吃的东西:“嗯”
}
const deepLinkFinder=(obj)=>{
设arr=[]
常量getKeyPath=(对象,路径)=>{
for(对象的常量键。键(obj)){
如果(对象的类型[键]=“对象”)
getKeyPath(obj[key],路径?
`${path}.${key}`:
`${key}`)
其他的
arr.push({
路径:路径?
`${path}.${key}`:
`${key}`,
值:obj[键]
})
}
}
getKeyPath(obj)
返回arr
}

console.log(deepLinkFinder(obj))
为什么要投否决票?我犯了错误吗?如果是,请告诉我,以便我可以修复:)