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;