我正在尝试使用apply方法来调用objectify函数,传递值数组并将其obj用作对象.但是,this没有设置为对象,而是设置为全局环境(window).
这样做的目的是获取一个字符串数组,然后将这些字符串传递给该函数objectify.调用函数时,它接受数组值,拆分它们,如果对象没有带字符串值的属性,则创建该属性.
以下是代码:
let obj = {};
let arr = ["user.name.firstname=John", "user.name.lastname=Smith"];
const objectify = x => {
let cur = this, v;
return x.split('.').forEach(e => /=/g.test(e) ?
(v = e.split('='), cur[v[0]] = v[1]) : cur[e] ?
cur = cur[e] : (cur[e] = {}, cur = cur[e]))};
objectify.apply(obj,arr);
Run Code Online (Sandbox Code Playgroud)
问题是this设置为Window而不是对象obj.我应该如何重写此代码以便将其设置obj为this值?
最终结果应该是一个修改过的obj对象,因此它变为:
obj = {user: {name: {firstname: 'John', lastname: 'Smith'}}};
Run Code Online (Sandbox Code Playgroud) 比较两种方法scan和runningFold(来自kotlin.collections)的页面,除了名称外,两者似乎相同。
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/scan.html
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/running-fold.html