在对象内部使用变量填充的javascript步骤

在对象内部使用变量填充的javascript步骤,javascript,object,variables,Javascript,Object,Variables,我尝试动态地深入对象内部。对象子对象未知,应改为从字符串中使用 我希望你能看到下面我试图做的事情。我已经指出了我找不出解决方案的部分 var global_object={}; 函数填充(id、文本){ 设parts=id.split('/'); 用于(输入零件){ 让零件=零件[键]; //全局对象['this']['is']['a']['long']['url']=text; 控制台日志(部分); } } 填充('this/is/a/long/url','mytext')像这样的东西应该可

我尝试动态地深入对象内部。对象子对象未知,应改为从字符串中使用

我希望你能看到下面我试图做的事情。我已经指出了我找不出解决方案的部分

var global_object={};
函数填充(id、文本){
设parts=id.split('/');
用于(输入零件){
让零件=零件[键];
//全局对象['this']['is']['a']['long']['url']=text;
控制台日志(部分);
}
}

填充('this/is/a/long/url','mytext')像这样的东西应该可以用
obj
是要填充的当前对象,它随着
for
循环的每次迭代而更新

let obj = global_object;
function populate(id, text) {
    let parts = id.split('/');

    for (let key in parts) {
        let part = parts[key];
        obj[part] = {};
        obj = obj[part];

    }
    obj = text;
}

您可以这样做,存储一个var
obj
,并在每次转动时将i放入一个新钥匙中。然后,对于文本,使用另一个变量“记住”最后一个变量

var global_object={};
函数填充(id、文本){
设parts=id.split('/');
设obj=全局对象,最后一个对象,部分;
用于(输入零件){
零件=零件[钥匙];
最后一个对象=对象;
obj[part]={};
obj=obj[零件]
控制台日志(部分);
}
最后一个对象[部分]=文本;
}
填充('this/is/a/long/url','mytext');

console.log(全局_对象)一种独立的、没有外部变量的替代递归解决方案

const populate=(id、文本、结果)=>{
const arr=id.split('/');
let key=arr.shift();
如果(键){
结果[键]={};
如果(!arr.length){result[key]=text;}
填充(arr.join(“/”),文本,结果[键])
}
返回结果;
}
log(填充('this/is/a/long/url','My text',{}))或减少它

var global_object = {};

function populate(id, text) {
    global_object = id.split("/").reduceRight((acc, part) => {
        var nested = JSON.parse(JSON.stringify(acc));

        acc = {};
        acc[part] = nested;

        return acc;
    }, text);
}

populate("this/is/a/long/url", "My text");

你的问题答案的可能重复是相似的,如果不是相同的话:由@Tony,尽管你所做的被认为是不好的做法@谢谢你!为什么这被认为是不好的做法,还有什么替代方法?@JensTörnell如果您重命名另一段代码中的一个属性,当前代码将无法正常工作。除非你能很好地控制它。不确定项目的上下文是什么。@Elineasif如果我尝试生成某种文件/文件夹API,用ajax从PHP获取文件和文件夹。其思想是,当我发送一个url或id时,它应该填充这个嵌套对象。然后,我可以使用该对象从js将文件树呈现为html元素。