【问题标题】:Alternative to eval for multiple property lookup [duplicate]用于多个属性查找的 eval 替代方案 [重复]
【发布时间】:2013-02-03 19:04:48
【问题描述】:

我有一个函数接受像"obj.key.subkey.subsubkey" 这样的字符串:

function(obj, key) {
  return eval('obj.'+ key);
}

在这种情况下,eval 的安全替代方案是什么,或者 eval 可以吗? new Function 在这种情况下 AFAIK 将不起作用。也许split 然后循环?

【问题讨论】:

  • @Felix Kilng。没看到那个,就是我要找的。毕竟,我希望不得不做这样的事情。然后循环它......
  • 我将它添加到我的收藏夹,因为我也找不到它;)

标签: javascript eval


【解决方案1】:

我不确定你是否真的需要一个函数。如果您有对象和键,只需使用键返回对象的属性。

obj[key]

如果您必须处理多个键:

function get(obj, key) {
  var keys = key.split(".");
  var tmp = obj;
  for (var x = 0; x < keys.length; x++){
     tmp = tmp[keys[x]];
  }
  return tmp;
}

工作示例:http://jsfiddle.net/H55ka/

【讨论】:

  • @elclanrs 很高兴我能帮上忙。
  • 我最终这样做了,但想法相同,只是为了能够链接它:return keys.map(function(k) { return tmp = tmp[k]; }).pop()
  • @elclanrs 不错!但是从我读过的内容来看,.map 仅在 IE >=9 中受支持。只是让你知道。 developer.mozilla.org/en-US/docs/JavaScript/Reference/…
  • @elclanrs:请注意,如果“链”中的任何键在对象中不存在,这些解决方案中的任何一个都会引发错误。
  • 这基本上适用于 Node 和 ES5,所以我很好。 @FelixKling:对,这对我来说不是问题,因为所有对象都有相同的键,但要记住。
猜你喜欢
  • 1970-01-01
  • 2013-05-22
  • 2010-10-31
  • 1970-01-01
  • 2015-05-30
  • 2017-11-22
  • 1970-01-01
  • 2011-09-15
  • 2013-04-08
相关资源
最近更新 更多