gpt4 book ai didi

javascript - 如何将此 JavaScript 字符串 "myArray[0].myPrice"转换为对 myPrice 的引用?

转载 作者:行者123 更新时间:2023-11-30 13:37:32 26 4
gpt4 key购买 nike

如果我有一个 "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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com