js将字符串当作js表达式执⾏⽅法
听同事说了⼀个需求。他有⼀个数据对象obj,接⼝会给他返回⼀个索引key,这个key长度不固定,根据这个key去修改obj对应的值。
举个例⼦:
let obj={"level1":{"level2":{"level3":100}},"level1B":{leve2:"999"}};
let key='level1.level2';
let value='wh';
现在我想修改索引key 对应的值 {"level3":100}为变量value的值 'wh'.
⽅法⼀:使⽤eval
eval函数我看了很多书都让别⽤这个函数。但是它真的很强⼤。
eval(`obj.${key}=value`);
鉴于eval有⼀些作⽤域问题,还有⼀些安全性问题听说最好别⽤(这个我其实没怎么⽤过,本着学习的态度琢磨了⼀下⽅法⼆)
字符串长度js⽅法⼆:使⽤new Function() 它也可以在函数⾥将字符串当作js表达式执⾏。
new Function('obj','key','value',`obj.${key}=value`)(obj,key,value);
注意点:
⽤模板字符串的时候只有key需要加${} obj和value虽然也是变量但是当作普通值处理就好了。(原因的话我认为因key代表的是动态的属性,如果不对欢迎指正)
最后:其实这个也可以写个递归函数来解决。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论