繁体   English   中英

javascript typescript 创建一个 object

[英]javascript typescript create a object

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

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 object,只会影响那个局部变量。 所以这个声明也没有持久的效果。

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

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

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM