javascript 打字稿创建一个对象

javascript typescript create a object

我有一个像这样的 属性 “data.property” = “16165456”.. 我尝试创建一个这样的对象

data {
   property : "16"
}

我使用拆分和循环但不起作用


    this.returnKey(model, this.to['pro1'], this.model[this.to['pro2']])
returnKey(model: any, name: string, value: string) {

        let nameParts = name.split("."),
            currentObject = model;
        for (let i in nameParts) {
            let part = nameParts[i]
            currentObject[part] = currentObject[part]

            this.currentObject = currentObject[part];
        }

        let part2 = nameParts[1];
        currentObject = value;
    }

几个问题:

  • currentObject[part] = currentObject[part] 是一个没有成就的陈述。当 属性 尚不存在时,您想指出要分配的内容,因此:

    currentObject[part] = currentObject[part] ?? {};
    
  • this.currentObject 是一个 属性,不是同名变量。 this 在这里不合适。只需分配给 currentObject.

  • 变量part2获得了一个值,但是没有被使用。所以这没有完成任何事情。

  • 最后的赋值currentObject = value不会影响model对象,只会影响那个局部变量。所以这句话也没有持久的效果。

  • for 循环迭代次数过多。您需要提前停止一步,这样您仍然可以将 value 分配给需要获取它的父对象的 属性。

这里是对所有这些问题的更正:

function returnKey(model, name, value) {
    let nameParts = name.split("."),
        key = nameParts.pop(), // extract the last property
        currentObject = model;
    for (let i in nameParts) { // Now we will iterate one time less
        let part = nameParts[i];
        // Initialise the property with `{}` when it is new:
        currentObject[part] = currentObject[part] ?? {};
        currentObject = currentObject[part];
    }
    // Assign to the deepest key, so the model will get it:
    currentObject[key] = value;
}

// Demo:
let name = "data.numeroApplication";
let value = "16165456";
let model = {};
returnKey(model, name, value);
console.log(model); // Model has mutated