[英]How do I change an object attribute based off of a path property array in another object?
目前,我不確定如何在javascript(React JS)程序中編輯我的對象之一。 我正在程序中實現Web套接字,因此我收到了一個對象,我需要使用該對象來編輯程序中的另一個對象。
這是兩個匯總的對象(僅包含更新的屬性):
objectWeAreEditingWith = {
path: [
"playerStatuses",
"id1" //really is an id like "b02a507f-31..."
],
value: [
true,
"Random"
]
}
objectWeAreEditing = {
property1: ...
property2: ...
...
playerStatuses: {
id1: [
false,
"Generalist"
]
}
...
moreProperties: ...
}
有關對象的一些細節。 “ objectWeAreEditingWith”將始終僅具有path和value屬性。 path屬性僅包含訪問“ objectWeAreEditing”中的正確鍵所需的鍵。 value屬性僅包含要在path屬性中詳細說明的鍵中更改的變量值。 “ ObjectWeAreEditing”可以包含任意數量的屬性。 要注意的另一件事是,數組“值”中的值始終與我們在“ objectWeAreEditing”中定位的屬性的順序(和大小)相同。 “ path”,“ value”和“ id1”在技術上可以是任意大小(很長的路徑/許多變量),但是id1和value始終具有相同的長度/具有與我之前說的順序相同的值。
對於這種情況,我正在嘗試做:
objectWeAreEditing[playerStatuses][id1][0] = objectWeAreEditingWith[value][0];
和
objectWeAreEditing[playerStatuses][id1][1] = objectWeAreEditingWith[value][1];
問題是,當然,我不知道自己正在編輯:
objectWeAreEditing[playerStatuses][id1]
因為此路徑是由“ objectWeAreEditingWith”給出的。 我也不知道我只是在編輯:
objectWeAreEditing[playerStatuses][id1][0];
和
objectWeAreEditing[playerStatuses][id1][1];
因為我正在編輯的變量數量在“ objectWeAreEditingWith”中給出。
第二部分的解決方案是進入“值”屬性並檢查其長度,並遍歷其中的許多變量(在本例中為id1)。 但是,我不知道如何遍歷對象內部鍵的路徑。
如果要根據object1
在object2
設置數據,一種解決方案是:
let object1 = {
path: [
"playerStatuses",
"id1"
],
value: [
true,
"Random"
]
};
let object2 = {
property1: true,
property2: true,
playerStatuses: {
id1: [
false,
"Generalist"
]
}
};
console.log(object2);
(function setObjectFrom(object1, object2) {
var i = 0;
if (object1.path.length <= 0) {
throw "Cannot set empty path";
}
var currentToKey = object1.path[i];
(function walkerObject(object, value) {
for (let key in object) {
if (key == currentToKey) {
if (object1.path.length-i <= 1) {
object[key] = value;
}
else {
i++;
currentToKey = object1.path[i];
walkerObject(object[key], value); // call itself
}
}
}
})(object2, object1.value);
})(object1, object2);
console.log(object2);
這里:一個函數( setObjectFrom
)被定義以設定的屬性object2
根據的object1.path
和object1.value
。 它定義了另一個名為walkerObject
函數。 此函數執行以下操作:每次找到path
的值(將其命名為vPath)作為object1
的鍵時,它都會驗證它是否為最后一個鍵:
value
設置為object2[vPath]
path
的下一個值,但將object2[vPath]
作為object2 這個功能是不是防彈影響,這就意味着,它不處理錯誤,如object1.path
沒有發現里面object2
等情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.