o.contact.email-6ren">
gpt4 book ai didi

javascript - 从 ES6 javascript 中的字符串动态创建方法(非浏览器)

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:32 25 4
gpt4 key购买 nike

在 JavaScript 代码中,我有一个字符串定义对象内的属性路径。例如

var def = "contact.email"

如何从该字符串中获取以下函数?

o => o.contact.email

这样我就可以通过以下方式使用它:

var person = {
name: 'Test',
contact: { email: 'test@test.test' }
}

var emailGetter = MagicCompileFunction('contact.email');

var email = emailGetter(person);
// here, email should hold the value of person.contact.email

路径字符串在编译时未知。它也可以由用户提供。

该解决方案也应该适用于非浏览器环境(没有 window 对象),例如在 NodeJS 服务器端 javascript 中。

我知道一种解决方案是创建一个通用方法,该方法采用一个对象和一个字符串作为参数(例如 valueGetter(person, "contact.email")),其中字符串定义对象内的路径,然后在每个点“.”上分割字符串。并跟随物体上的路径。但我不希望在每次调用 getter 函数时执行该算法。我需要一个动态编译的方法,它会给我一个最终的 getter,可以立即访问所需的(子)属性。

最佳答案

Archer's answer 稍微多一点 ES6 :

function MagicCompileFunction(mapping) {
return (obj => mapping.split(".").reduce((curr, name) => curr[name], obj));
}

var person = {
name: "Test",
contact: {
email: "test@test.test"
}
}

var emailGetter = MagicCompileFunction("contact.email");
var email = emailGetter(person);

var nameGetter = MagicCompileFunction("name");
var name = nameGetter(person);

console.log(email);
console.log(name);

关于javascript - 从 ES6 javascript 中的字符串动态创建方法(非浏览器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43370475/

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