我有一个像这样的多维对象:
Router.js
import Notes from './notes';
import Users from './users';
const router = {
Notes,
Users
};
export default router
每个对象也都有这样的对象:
Notes.js
import Index from '../../components/notes/index'
import Show from '../../components/notes/show'
import Create from '../../components/notes/create'
const routes = {
index: Index,
show: Show,
create: Create
};
export default routes;
现在,我将对象分配给变量:
App.js
import Router from 'Router'
var route = Router
var router = function(name) {
console.log(route[name]) // undefined when using dotnotation
console.log(route.Notes.create) // works when I manually do it like this
}
router('Notes.create') // I want to access the Notes.create variable
所以我的问题是,如何将点符号字符串传递给route函数以访问'Notes-> create'元素?
答案 0 :(得分:1)
您可以拆分字符串并通过迭代键获取值并返回level属性的值。
var router = function(name) {
console.log(name.split('.').reduce((o, k) => o[k], route));
}
答案 1 :(得分:0)
最好的答案是不要以这种方式使用符号,但是如果您坚持使用它,则可以解析字符串以获取层次结构的每个级别: 然后,您可以使用括号表示法获取属性:
function getPropWithDotNotation(obj, selectorString) {
let hierarchy = selectorString.split('.');
let result = obj;
hierarchy.forEach(level => result = result[level]);
return result;
}
答案 2 :(得分:0)
您可以创建一个通用函数并检查每个键并获取参考
let a = {
b : {
c : 'some value'
}
}
let findBy = (str) => {
let keys = str.split('.')
let i=0;
let op = a;
while(i < keys.length){
op = op[keys[i]]
if(!op) return op
i++
}
return op
}
console.log(findBy('b'))
console.log(findBy('d'))
console.log(findBy('b.c'))