我目前不确定如何在我的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属性只包含在" objectWeAreEditing"中访问正确密钥所需的密钥。 value属性只包含要在path属性中详细说明的键中更改的变量值。 " ObjectWeAreEditing"可以包含任意数量的属性。另外需要注意的是数组中的值" value"始终与我们在" objectWeAreEditing"中定位的属性具有相同的顺序(和大小)。 "路径","值"," id1"可以技术上任何大小(非常长的路径/很多变量),但id1和值将始终具有相同的长度/具有与我之前说过的相同顺序的值。
对于这种情况,我正在尝试:
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)。但是,我不知道如何遍历对象内部的键路径。
答案 0 :(得分:0)
如果您想根据object2
在object1
中设置数据,则有一种解决方案:
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
内未发现错误等错误。