如何在点表示法中使用变量,如具有可变深度的方括号表示法



如何通过包含属性路径的变量访问JavaScript中的不同JSON对象?

var item = {
"car": {
"manufacturer": "Ford",
"model": "Taunus"
"surface": {
"color": "silver",
"type": "metallic"
}
"built (year)": "1975"
};
let foo = "model";
let bar = "surface.color";
consloe.log("Model: " + item[foo]);          // Output: "Taunus"
console.log("Surface color:" + item[bar]);   // Output: "undefined", Desired output "silver"

当然,这种表示法只表示每组括号中的一个层次级别。有没有一种简单而优雅的方法可以访问几个级别,只使用一个标记变量;一、二";以及";一、二、三";?

您可以创建一个函数,将以.(点(为分隔符的字符串拆分为字符串数组,并使用它们在reducer函数中遍历对象。

const item = {
"car": {
"manufacturer": "Ford",
"model": "Taunus",
"surface": {
"color": "silver",
"type": "metallic"
},
"built (year)": "1975"
}
}
const foo = "car.model";
const bar = "car.surface.color";
function get(path) {
const parts = path.split(".");
return parts.reduce((obj, part) => obj[part], item);
}  
get(foo); // should return "Taunus"
get(bar); // should return "silver"

这可能是为了帮助你而迟到了,我到处都看到你不能在点表示法中使用vaibles,但我就是这样做的。希望它能有所帮助。

我只是将变量保存为字符串,然后用方括号将它们传递出去。

示例:

var item = {
"car": {
"manufacturer": "Ford",
"model": "Taunus",
"surface": {
"color": "silver",
"type": "metallic"
},
"built (year)": "1975",
}};
let foo = "model";
let bar = "surface";
let color = `color`;
console.log("Model: " + item.car[foo]);          // Output: "Taunus"
console.log("Surface color:" + item[bar]);   // Output: "undefined", Desired output "silver"
console.log(`--------------------------------------------`)
console.log(`Model: ${item.car[foo]}`); // Output: `Taunus`
console.log(`Surface Color: ${item.car[bar][color]}`); //Output: `Surface Color: silver`

希望这对你有所帮助:(

最新更新