如何使用JS 的模板字符串的拼接来获取对象某个属性的值,如拼接出 obj[a][b][c] 这种?

如何使用JS 的模板字符串来获取对象某个属性的值,如拼接出 obj[a][b][c] 这种,其中 a/b/c 的个数是不定的,所以 obj后面该如何拼接呢?

如果直接是

const obj = {

a: {

b: {

c: 1

}

}

}

const str = 'a.b.c';

const tpl = obj`${str.split('.')}` ;

这时候会报错 obj 不是一个 function
那该怎么来拼接呢,能够直接使用模板函数来直接得到 obj.a.b.c 的值
注:不使用循环来获取obj 的值,比如使用 map / reduce / while 来获取,也就是不使用 lodash 中 get 的方式,现在想的是如何来根据模板字符串来获取,想探讨一下这种形式


回答:

一种不太推荐的写法with(obj){eval(str)},就是在with中让str以代码的形式运行,eval还可以换成new Function

纯模板字符串实现不了,语言特性如此,最好使用循环来获取值


回答:

其实正确的是 obj["a"]["b"]["c"]
所以

const obj = {

a: {

b: {

c: 1

}

}

}

const str = 'a.b.c';

a=str.split('.');

t=obj;

for( i in a){

t=t[a[i]];

}

const tpl=t;


回答:

const obj = {

a: {

b: {

c: 1

}

}

}

const str = 'a.b.c'

const fn = new Function('obj','str',`return obj.${str}`)

console.log('? ~ fn', fn(obj,str))


回答:

我写过一个正适合:https://github.com/hungtcs/pi...
另外可以用: https://lodash.com/docs/4.17....

如果用上面我写的 pico-sandbox 的话

import { Sandbox } from 'pico-sandbox';

function get(object: any, path: string) {

return Sandbox.compile(path)(object);

}

const result = get({ a: { b: { c: 1 } } }, 'a.b.c');

// or

const result = get({ a: { b: { c: 1 } } }, 'a["b"]["c"]');


回答:

直接用 lodash 吧,哈哈

const obj = {

a: {

b: {

c: 'hello'

}

}

}

_.get(object, 'a.b.c');

以上是 如何使用JS 的模板字符串的拼接来获取对象某个属性的值,如拼接出 obj[a][b][c] 这种? 的全部内容, 来源链接: utcz.com/p/932773.html

回到顶部