如何根据条件为json对象设置值?

问题描述 投票:-2回答:3

我有一个从服务器返回的列表对象,例如:

{
    "items": [
        {
            "id": 1,
            "role": "SYSTEM_ADMIN"
        },
        {
            "id": 2,
            "role": "SYSTEM"
        },
        {
            "id": 3,
            "role": "USER"
        }
    ]
}

这里的问题是我想按照上述条件设置上述json中每个对象的等级值:

  • SYSTEM_ADMIN =>等级:3
  • SYSTEM =>等级:2
  • 用户=>等级1

示例:

{
    "items": [
        {
            "id": 1,
            "role": "SYSTEM_ADMIN",
            "rank": 3
        },
        {
            "id": 2,
            "role": "SYSTEM",
            "rank": 2
        },
        {
            "id": 3,
            "role": "USER",
            "rank": 1
        },
        {
            "id": 4,
            "role": "SYSTEM",
            "rank": 2
        }
    ]
}

我如何使用javascript快速设置对象的等级值,如果没有太多的话?谢谢大家

javascript json
3个回答
0
投票

正如某些人建议的那样,创建响应时最好在服务器上进行。

如果由于某种原因仍需要在前端进行此操作,则可以创建一个常量映射,将每个角色值的排名存储在对象映射中:

const rankMap = {
  SYSTEM_ADMIN: 3,
  SYSTEM: 2,
  USER: 1
};

const data = {
  "items": [{
      "id": 1,
      "role": "SYSTEM_ADMIN"
    },
    {
      "id": 2,
      "role": "SYSTEM"
    },
    {
      "id": 3,
      "role": "USER"
    }
  ]
}

data.items = data.items.map(item => ({
  ...item,
  rank: rankMap[item.role],
}));

console.log(data);

0
投票

您可以创建一个包含rank的对象,然后只使用map

let ranks = {SYSTEM_ADMIN: 3, SYSTEM: 2, USER: 1};
let result = items.map(({id, role})=> ({id, role, rank: ranks[role]}));

示例:

let items = [
  {
      "id": 1,
      "role": "SYSTEM_ADMIN"
  },
  {
      "id": 2,
      "role": "SYSTEM"
  },
  {
      "id": 3,
      "role": "USER"
  }
];

let ranks = {SYSTEM_ADMIN: 3, SYSTEM: 2, USER: 1};

let result = items.map(({id, role})=> ({id, role, rank: ranks[role]}));
console.log(result)

0
投票

我将在字典中列出角色及其各自的等级。然后可以非常简单地映射响应]

let response = {
    items: [
        {
            "id": 1,
            "role": "SYSTEM_ADMIN",
        },
        {
            "id": 2,
            "role": "SYSTEM",
        },
        {
            "id": 3,
            "role": "USER",
        },
        {
            "id": 4,
            "role": "SYSTEM",
        }
    ]
}

let rankMap = {
    "SYSTEM_ADMIN": 3,
    "SYSTEM": 2,
    "USER": 1
}

response.items.forEach(i => i['rank'] = rankMap[i.role]);

console.log(response);
© www.soinside.com 2019 - 2024. All rights reserved.