繁体   English   中英

在 Typescript 中更新嵌套对象中的值

[英]Update values in nested object in Typescript

假设我有这个对象:

{
   b954WYBCC4YbsMM36trawb00xZ32: { activity1: "pending", activity2: "pending" },
​   pby0CAqQ1hTlagIqBTQf6l2Ti9L2: { activity1: "pending", activity2: "pending" }
}

其中第一个键是来自数据库的 ID。 我希望能够基于数组更改activity1activity2的值:

// '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时更改activity1activity2的值。

基于上述示例的最终结果应如下所示:

{
   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.

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