简体   繁体   English

我如何才能将变量用作对象名称(子对象的大小写)

[英]how i can to use variable into object name (sub object case)

Suppose i have data like this 假设我有这样的数据

data = {
     personal : {
           sport : "Football"
     }
}

i try to extract string. 我尝试提取字符串。 it work 这行得通

let str1 = "personal"
let str2 = "sport"
console.log(data[str1][str2])

The problem i have a more string. 问题我有一个更多的字符串。 each string so different. 每个字符串是如此不同。 how i can to use one for every string. 我如何才能为每个字符串使用一个。

let str_1 = "personal.sport"
let str_2 = "personal.sport.xxx"
let str_3 = "personal.aaa.sport.xxx"
.....
..
let str_n = "bbb.ccc.ddd"


console.log(data[str_1])
console.log(data[str_2])
console.log(data[str_3])
....
... 
console.log(data[str_n])

Thank you. 谢谢。

I'm not completely sure I get what you mean but is this what you're after? 我不能完全确定我理解您的意思,但这是您所追求的吗?

 var data = { personal: { sport: "Football" } }; let str_1 = "personal.sport"; let str_2 = "personal.sport.xxx"; let str_3 = "personal.aaa.sport.xxx"; function getValue(path) { var obj = data; var props = path.split("."); for (const prop of props) { obj = obj[prop]; if (!obj) return obj; } return obj; } console.log(getValue(str_1)) 

try this code: 试试这个代码:

 let data = { personal: { sport: { xxx: "Football" }, aaa: { sport: { xxx: "Football" } } } }; let str_1 = "personal.sport"; let str_2 = "personal.sport.xxx"; let str_3 = "personal.aaa.sport.xxx"; function getVal(path, obj) { return path.split(/\\./g).reduce((re, attr) => re[attr], obj); } console.log(getVal(str_1, data)); console.log(getVal(str_2, data)); console.log(getVal(str_3, data)); 

Option 1: Looping through keys. 选项1:循环浏览按键。

 var data = { 'foo': { 'bar': 'xyz' }, 'one': { 'two': 'three' }, 'error': 'Boom!' }; var finder = function(data, findBy) { var keys = (findBy || '').split(/\\./); var tmp = data; var key; while (keys.length) { key = keys.shift(); if (tmp.hasOwnProperty(key)) { tmp = tmp[key]; continue; } tmp = undefined; break; } return tmp; }; console.log(finder(data, 'foo.bar')); console.log(finder(data, 'error')); console.log(finder(data, null)); console.log(finder(data, '')); 

Option 2: using Function , many of developers won't agree with this, inculding eval 选项2:使用Function ,许多开发人员不同意这一点,包括eval

 var data = { 'foo': { 'bar': 'xyz' }, 'one': { 'two': 'three' }, 'error': 'Boom!' }; var finder = function(data, findBy) { var keys = '["' + (findBy || '').replace(/\\./, '"]["') + '"]'; var finderStr = 'return ' + JSON.stringify(data) + keys + ';'; //console.log(finderStr); var func = new Function(finderStr); return func(); }; console.log(finder(data, 'foo.bar')); console.log(finder(data, 'error')); console.log(finder(data, null)); console.log(finder(data, '')); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM