我有这个对象结构:
let data = {
prop1 = {
prop11 = {
prop111 = 'hello'
},
prop12 = {...}
},
prop2= {...}
}
我有这个格式化的字符串:'data.prop1.prop11.prop111'
我想将此字符串映射到数据结构并获取值(在此示例中为“hello”)。它的一般数据结构,我不知道属性的名称是如何(不是固体属性名称)。 这是怎么做的简单方法?可能我需要解析字符串到数组然后呢?
感谢您的建议
答案 0 :(得分:1)
我几个月前创建了一个类似的功能,
假设你有这个对象:
var obj = {
data: {
prop1: {
prop11: {
prop111: 'hello'
},
prop12: "12"
},
prop2: "1"
}
}
然后,您可以使用此功能(JavaScript):
function getDescendantProp(obj, desc) {
var arr = desc.split(".");
if (arr.length > 0 && arr[0] !== "") {
while (arr.length) {
var name = arr.shift();
if (name in obj) {
obj = obj[name];
} else {
console.warn('[getDescendantProp] - ' + name + ' property does not exists.');
return undefined;
}
}
}
return obj;
}
TypeScript代码:
function getDescendantProp(obj: {[key: string]: {}}, desc: string) {
if (obj === null || obj === undefined || desc === "") {
return undefined;
}
const arr: string[] = desc.split(".");
if (arr.length > 0 && arr[0] !== "") {
while (arr.length) {
const name: string | undefined = arr.shift();
if ((typeof name === "string") && (name in obj)) {
obj = obj[name];
} else {
console.warn("[getDescendantProp] - " + name + " property does not exists.");
return undefined;
}
}
}
return obj;
}
并使用它:
getDescendantProp(obj, "data.prop1.prop11.prop111") // hello