[英]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.