【问题标题】:Want a single json array object from another multiple array objects for API consume using JavaScript [duplicate]想要使用 JavaScript 从另一个多个数组对象中获取单个 json 数组对象以供 API 使用 [重复]
【发布时间】:2021-04-20 08:10:55
【问题描述】:

1.我有以下来自另一个 API 的 json 数据。它在单独的数组对象中显示国家和标志

{
"data": [
            {
                "service": "Tourist Visa",
                "service_id": 2,
                "country_id": 2,
                "country_name": "Australia",
                "country_flag": "https://getset-visa.s3.amazonaws.com/images/flag/australia-flag.JPG"
            },
            {
                "service": "Tourist Visa",
                "service_id": 2,
                "country_id": 1,
                "country_name": "India",
                "country_flag": "https://getset-visa.s3.amazonaws.com/images/countries/Indian-Flag.png"
            },
            {
                "service": "Visa Services",
                "service_id": 3,
                "country_id": 1,
                "country_name": "India",
                "country_flag": "https://getset-visa.s3.amazonaws.com/images/countries/Indian-Flag.png"
            }
        ]
}

2。我想将其转换为如下所示,使用 JavaScript 在 API 中使用。就像一个数组中的一个国家数据和另一个数组对象中的另一个国家数据以及国家、标志和服务数组

{
  "data": [
    {
      "countryName": "Australia",
      "countryFlag": "https://getset-visa.s3.amazonaws.com/images/flag/australia-flag.JPG",
      "services": [
        {
          "serviceName": "Tourist Visa"
        }
      ]
    },
    {
      "countryName": "India",
      "countryFlag": "https://getset-visa.s3.amazonaws.com/images/countries/Indian-Flag.png",
      "services": [
        {
          "serviceName": "Visa Services"
        },
        {
          "serviceName": "Tourist Visa"
        }
      ]
    }
  ]
}

任何帮助表示赞赏。

【问题讨论】:

标签: javascript arrays api express object


【解决方案1】:

您可以使用Array#reduceMap

const response = {
  data: [
    {
      service: "Tourist Visa",
      service_id: 2,
      country_id: 2,
      country_name: "Australia",
      country_flag:
        "https://getset-visa.s3.amazonaws.com/images/flag/australia-flag.JPG",
    },
    {
      service: "Tourist Visa",
      service_id: 2,
      country_id: 1,
      country_name: "India",
      country_flag:
        "https://getset-visa.s3.amazonaws.com/images/countries/Indian-Flag.png",
    },
    {
      service: "Visa Services",
      service_id: 3,
      country_id: 1,
      country_name: "India",
      country_flag:
        "https://getset-visa.s3.amazonaws.com/images/countries/Indian-Flag.png",
    },
  ],
};

const output = Array.from(response.data.reduce(
  (m, {country_id: id, country_name: countryName, country_flag: countryFlag, service: serviceName}) => (
    m.has(id)
      ? m.get(id).services.push({ serviceName })
      : m.set(id, { countryName, countryFlag, services: [{ serviceName }] }),
    m
  ),
  new Map()
).values());

console.log({data: output});

【讨论】:

  • @VijayBhatia 请检查这是否解决了您的问题,如果您有任何问题,请告诉我。
  • @georg 哦,我的错!感谢您指出。我会更新我的答案。
  • 索姆。我想要一些不同的输出
  • @VijayBhatia 我已经更新了我的答案,请看一下,这是你想要的吗?
  • 是的,@SomShekharMukherjee。这是完美的。这就是我一直在寻找的。非常感谢。
猜你喜欢
  • 2016-11-23
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 2014-05-26
  • 2019-07-04
  • 1970-01-01
相关资源
最近更新 更多