[英]Update values in nested object in Typescript
假设我有这个对象:
{
b954WYBCC4YbsMM36trawb00xZ32: { activity1: "pending", activity2: "pending" },
pby0CAqQ1hTlagIqBTQf6l2Ti9L2: { activity1: "pending", activity2: "pending" }
}
其中第一个键是来自数据库的 ID。 我希望能够基于数组更改activity1
和activity2
的值:
// 'data' is the object mentioned above.
const usersHaveSpecialContentAssigned = [true, false];
Object.values(data).forEach((item, index) => {
const arrayActivityProgress = Object.values(item as string[]);
if (usersHaveSpecialContentAssigned[index] === false) {
arrayActivityProgress.forEach((progress) => {
progress = 'unassigned';
console.log(progress);
});
}
});
如您所见,我的目标是在usersHaveSpecialContentAssigned
中的相应值为false
时更改activity1
和activity2
的值。
基于上述示例的最终结果应如下所示:
{
b954WYBCC4YbsMM36trawb00xZ32: { activity1: "pending", activity2: "pending" },
pby0CAqQ1hTlagIqBTQf6l2Ti9L2: { activity1: "unassigned", activity2: "unassigned" }
}
我怎样才能做到这一点? 我当前的方法不会更新值。
因为您已经知道 id 是什么,所以我会这样写。
var initialData = {
b954WYBCC4YbsMM36trawb00xZ32: { activity1: "pending", activity2: "pending" },
pby0CAqQ1hTlagIqBTQf6l2Ti9L2: { activity1: "pending", activity2: "pending" }
};
var permissionsPerUserDataIn = {"b954WYBCC4YbsMM36trawb00xZ32": true, "pby0CAqQ1hTlagIqBTQf6l2Ti9L2": false, "id3": false};
并像这样编写您的函数:
function fixData(permissionsPerUser) {
for (var [id, values] of Object.entries(initialData)) {
if (permissionsPerUser.hasOwnProperty(id) && !permissionsPerUser[id]) {
values.activity1 = 'unassigned';
values.activity2 = 'unassigned';
console.log(`${id}: `, values);
}
}
}
fixData(permissionsPerUserDataIn);
这样做可以让您更精细地控制将更新哪些权限,并且您不必担心数组中的值因任何原因不同步。
你可以写
Object.values(data).forEach((item, index) => {
if (!usersHaveSpecialContentAssigned[index])
item.activity1 = item.activity2 = "unassigned";
您当然需要注意索引不要超出范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.