Javascript 将字符串转换为带分隔符的对象键

Javascript 将字符串转换为带分隔符的对象键,javascript,arrays,loops,join,delimiter,Javascript,Arrays,Loops,Join,Delimiter,我正在尝试将字符串转换为带分隔符的对象键,但在如何遍历数组长度并相应地联接方面需要一些帮助 SET('my.delimited.string.of.unknown.length') const SET = key => (state, val) => { if(key.indexOf('.') !== -1) { let array = key.split(".") for (var i = 0; i < ar

我正在尝试将字符串转换为带分隔符的对象键,但在如何遍历数组长度并相应地联接方面需要一些帮助

SET('my.delimited.string.of.unknown.length')

const SET = key => (state, val) => { 
        if(key.indexOf('.') !== -1) {
            let array = key.split(".")
            for (var i = 0; i < array.length; i++) {
                  // what should I do here?
            }
            // desired output based on array length
            // state[ array[0] ][ array[1] ] = val
            // state.my.delimited.string.of.unknown.length = val
        }
}

reduce的一个非常罕见的用例:

当然,这也可以通过For循环实现:

 let array = key.split("."), acc = state;
 for (var i = 0; i < array.length - 1; i++) {
   acc = acc[ array[i] ];
 }
 acc[ array.pop() ] = val;

要设置值,可以分割路径并通过遍历给定对象来减少路径。如果不存在对象,请使用名称创建新属性。稍后指定值

函数setValueobject、路径、值{ var keys=path.split', last=keys.pop; keys.reduceo,k=>o[k]=o[k]| |{},object[last]=value; } var检验={}; setValuetest,first.deep.property,1; setValuetest和.other.deep.property,20;
控制台日志测试 您也可以使用一个:

const makeObject=arr,val,obj={}=>{ arr.split'..reducer,c,i,a=>r[c]=i==a.length-1?val:{},obj 返回obj } console.logmakeObjectfirst.deep.property,1
console.logmakeObjectand.Other.deep.property,20请同时添加想要的结果。@NinaScholz想要的结果包括在内。如果未定义state.my,会发生什么情况?可能的副本副本副本上有您的答复:谢谢!我不确定我是否完全理解这里发生的事情,但它是有效的。我必须研究reduce。事实上,在进一步测试时,如果属性包含超过1个分隔符,则此操作无效。@master00在问题中添加一个特殊情况的示例。
 let array = key.split("."), acc = state;
 for (var i = 0; i < array.length - 1; i++) {
   acc = acc[ array[i] ];
 }
 acc[ array.pop() ] = val;