- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有一个 "myArray[0].myPrice"
字符串,我如何将其转换为对 myPrice
的引用?
这是代码上下文:
binding.value = convert(binding.data[binding.field],
binding.converter, binding.data, elem);
binding.field
是包含“myArray[0].myPrice”的内容。
binding.data
引用了具有 myArray 数组属性的分层对象,第一个元素是具有 myPrice 属性的对象。
编辑:根据答案,这有效:
binding.value = convert(eval('(binding.data.' + binding.field + ')'),
binding.converter, binding.data, elem);
这样用eval好不好?我以为 eval 会在更新的 JavaScript 中消失?
最佳答案
您可以使用eval
,但这里有一个更好的解决方案:
// The following code results in the same as that scary eval(...)
var data = binding.data,
chain = binding.field.split(/[\.\[\]]+/);
for (var i = 0; data[chain[i]]; i++) {
data = data[chain[i]];
}
// Embrace JavaScript Awesomeness!
我在这里做的事情的分割:
在 JS 中,任何属性都可以作为 object[propertyName]
调用。
这包括数组,即 a[3]
与 a['3']
相同。
因此,我们使用以下字符之一拆分字符串:.
、[
、]
。 +
在那里,因为没有它,如果你有 a[3].b[3]
.
会给你一个空的字符串。
我们最后可能会得到一个空字符串,但这不是问题,因为 ""
就像 JS 中的 false
。
您可以更进一步,过滤掉所有无效的变量名,在 javascript 中是不符合 [a-zA-Z_$][0-9a-zA-Z_$]*< 的名称
。但我不太确定为什么要这样做......
关于javascript - 如何将此 JavaScript 字符串 "myArray[0].myPrice"转换为对 myPrice 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4150096/
如果我有一个 "myArray[0].myPrice" 字符串,我如何将其转换为对 myPrice 的引用? 这是代码上下文: binding.value = convert(binding.data
我是一名优秀的程序员,十分优秀!