我有一个具有嵌套属性的对象:
{
a: {
b: {
c: { min: 1, max: 2 },
d: 1
}
}
}
嵌套可以是任何深度级别。它以具有其中一个属性(min,max,in)或非对象(string,number,bool)的对象结束
我想为这些端点的路径生成一个字符串。
E.g。对于上面的对象,我想得到以下结果:
objPaths(a)
=> {
"a.b.c": { min: 1, max: 2 }
"a.b.d": 1
}
答案 0 :(得分:0)
您可以使用for...in
循环为此创建递归函数。此外,如果当前属性的值是对象,则需要在进入下一级别之前检查某些键是min
还是max
。
const obj = {"a":{"b":{"c":{"min":1,"max":2},"d":1}}}
const objPaths = (obj, paths = {}, prev = '') => {
for (let key in obj) {
let str = (prev ? prev + '.' : '') + key;
if (typeof obj[key] != 'object') paths[str] = obj[key];
else if (Object.keys(obj[key]).some(k => ['min', 'max'].includes(k))) paths[str] = obj[key];
else objPaths(obj[key], paths, str)
}
return paths
}
const result = objPaths(obj);
console.log(result)

答案 1 :(得分:0)
您可以采用迭代和重复方法并检查对象是否包含min
或max
个键,然后获取对象或值,否则将对象包含在内。
function getPath(object) {
function iter(o, p) {
if (o && typeof o === 'object' && !['min', 'max'].some(k => k in o)) {
Object.entries(o).forEach(([k, v]) => iter(v, p + (p && '.') + k));
return;
}
result[p] = o;
}
var result = {};
iter(object, '');
return result;
}
console.log(getPath({ a: { b: { c: { min: 1, max: 2 }, d: 1 } } }));