【问题标题】:How to change the format of an array using tyscript [duplicate]如何使用打字稿更改数组的格式[重复]
【发布时间】:2020-08-29 18:40:24
【问题描述】:

我的 Api 响应包含许多类似的值,我想将其更改为以下格式。

回复如下:

   {
    "data": [
          {name: "implemented", value: "0", label: "Apple"},
          {name: "notapplicable", value: "0", label: "Apple"},
          {name: "notimplemented", value: "0", label: "Apple"},
          {name: "partialimplemented", value: "0", label: "Apple"},
          {name: "planned", value: "0", label: "Apple"},
          {name: "unknown", value: "14", label: "Apple"},
          {name: "implemented", value: "3", label: "Orange"},
          {name: "notapplicable", value: "0", label: "Orange"},
          {name: "notimplemented", value: "0", label: "Orange"},
          {name: "partialimplemented", value: "0", label: "Orange"},
          {name: "planned", value: "0", label: "Orange"},
          {name: "unknown", value: "7", label: "Orange"}
     ]}

我想要以下格式的数组:

   {
    "data": [
          {
             name: "implemented", 
             value: [0,3], 
             label: ["Apple","Orange"]
          },
          {
             name: "notapplicable", 
             value: [0,0], 
             label: ["Apple","Orange"]
          },
          {
             name: "notimplemented", 
             value: [0,0], 
             label: ["Apple","Orange"]
          },
          {
             name: "partialimplemented", 
             value: [0,0], 
             label: ["Apple","Orange"]
          },
          {
             name: "planned", 
             value: [0,0], 
             label: ["Apple","Orange"]
          },
          {
             name: "unknown", 
             value: [14,7], 
             label: ["Apple","Orange"]
          }
     ]}

谁能帮我改一下数组的格式???

【问题讨论】:

  • 你尝试过什么,它到底有什么问题?
  • 你已经问过这个question once already,这个问题的答案有什么问题?

标签: javascript arrays angular typescript


【解决方案1】:

你可以使用reduce函数然后得到map的值

 const raw = {
   "data": [{
       name: "implemented",
       value: "0",
       label: "Apple"
     },
     {
       name: "notapplicable",
       value: "0",
       label: "Apple"
     },
     {
       name: "notimplemented",
       value: "0",
       label: "Apple"
     },
     {
       name: "partialimplemented",
       value: "0",
       label: "Apple"
     },
     {
       name: "planned",
       value: "0",
       label: "Apple"
     },
     {
       name: "unknown",
       value: "14",
       label: "Apple"
     },
     {
       name: "implemented",
       value: "3",
       label: "Orange"
     },
     {
       name: "notapplicable",
       value: "0",
       label: "Orange"
     },
     {
       name: "notimplemented",
       value: "0",
       label: "Orange"
     },
     {
       name: "partialimplemented",
       value: "0",
       label: "Orange"
     },
     {
       name: "planned",
       value: "0",
       label: "Orange"
     },
     {
       name: "unknown",
       value: "7",
       label: "Orange"
     }
   ]
 }

 const formatted = raw.data.reduce((acc, cur) => {
   obj = acc[cur.name];
   if (!obj) {
     acc[cur.name] = {
       name: cur.name,
       value: [],
       label: []
     };
     obj = acc[cur.name];

   }

   obj.value.push(cur.value);
   obj.label.push(cur.label);
   return acc;
 }, {});

 console.log(Object.values(formatted));

【讨论】:

  • 这可能是实现这一目标的最佳方式。请注意,您在推送时忘记将值从 string 转换为 int
【解决方案2】:

您应该有两个types (interfaces),每个格式一个。

{name: string; value: string; label: string;}

{name: string; value: number[]; label: string[];}

为了真正的转换,你可以这样做:

const data = {
    "data": [
          {name: "implemented", value: "0", label: "Apple"},
          {name: "notapplicable", value: "0", label: "Apple"},
          {name: "notimplemented", value: "0", label: "Apple"},
          {name: "partialimplemented", value: "0", label: "Apple"},
          {name: "planned", value: "0", label: "Apple"},
          {name: "unknown", value: "14", label: "Apple"},
          {name: "implemented", value: "3", label: "Orange"},
          {name: "notapplicable", value: "0", label: "Orange"},
          {name: "notimplemented", value: "0", label: "Orange"},
          {name: "partialimplemented", value: "0", label: "Orange"},
          {name: "planned", value: "0", label: "Orange"},
          {name: "unknown", value: "7", label: "Orange"}
     ]}

const obj = data.data.reduce((obj, {name, value, label}) => {
  if(!obj[name]) obj[name] = {value: [], label: []}
  obj[name].name = name;
  obj[name].value.push(+value);
  obj[name].label.push(label);
  return obj;
}, {});
const res = {
  data: Object.values(obj)
}
console.log(res);

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 2016-09-15
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2023-04-05
    • 2019-04-19
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多