[英]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.