重新排列数组以使键具有值

2022-03-14 00:00:00 arrays javascript javascript-objects

我有一个Javascript对象数组,如下所示

const lab = [
  {
    name: "Lance",
    item: "PS",
    "3-Aug-21": "117.69",
    "4-Aug-21": "120.1",
    "5-Aug-21": "122.08",
  },
  {
    name: "Sam",
    item: "PS",
    "3-Aug-21": "100.14",
    "4-Aug-21": "101.2",
    "5-Aug-21": "103",
  },
  {
    name: "Vince",
    item: "PS",
    "3-Aug-21": "12.65",
    "4-Aug-21": "13.29",
    "5-Aug-21": "13.68",
  },
];

我将其修改如下

const labCheck = [
  {
    id: "Lance",
    values: [
      { date: "3-Aug-21", risklevel: "117.69" },
      { date: "4-Aug-21", risklevel: "120.1" },
      { date: "5-Aug-21", risklevel: "122.08" },
    ],
  },
  {
    id: "Sam",
    values: [
      { date: "3-Aug-21", risklevel: "100.14" },
      { date: "4-Aug-21", risklevel: "101.2" },
      { date: "5-Aug-21", risklevel: "103" },
    ],
  },
  {
    id: "Vince",
    values: [
      { date: "3-Aug-21", risklevel: "12.65" },
      { date: "4-Aug-21", risklevel: "13.29" },
      { date: "5-Aug-21", risklevel: "13.68" },
    ],
  },
];

我已经尝试了下面的代码

const labCheck = lab
  .map((d) => d.name)
  .map(function (name) {
    // console.log(id);
    return {
      id: name,
      values: Object.keys(lab[0])
        .slice(2)
        .map(function (d, id) {
          return {
            date: d,
            risklevel: +lab[id][d],
          };
        }),
    };
  });

它似乎起作用了,我得到了结构,但是riskLevel的值对于所有id都是相同的,这是不正确的。

我已经试着纠正这个问题好几天了,但是没有成功。 有谁能帮忙吗?


解决方案

使用destructuring在重构的每个级别隔离并重命名我们感兴趣的属性。

const lab = [{ name: "Lance", item: "PS", "3-Aug-21": "117.69", "4-Aug-21": "120.1", "5-Aug-21": "122.08", }, { name: "Sam", item: "PS", "3-Aug-21": "100.14", "4-Aug-21": "101.2", "5-Aug-21": "103", }, { name: "Vince", item: "PS", "3-Aug-21": "12.65", "4-Aug-21": "13.29", "5-Aug-21": "13.68", },];

const labCheck = lab.map(({ name: id, item, ...values }) => ({
  id,
  values: Object.entries(values).map(([date, risklevel]) => ({ date, risklevel }))
}));

console.log(labCheck)
.as-console-wrapper { max-height: 100% !important; top: 0; }

如果需要在重构过程中变化值,则不能使用property shorthand,而需要显式声明每个属性并分配相关的变化值。

const lab = [{ name: "Lance", item: "PS", "3-Aug-21": "117.69", "4-Aug-21": "120.1", "5-Aug-21": "122.08", }, { name: "Sam", item: "PS", "3-Aug-21": "100.14", "4-Aug-21": "101.2", "5-Aug-21": "103", }, { name: "Vince", item: "PS", "3-Aug-21": "12.65", "4-Aug-21": "13.29", "5-Aug-21": "13.68", },];

const labCheck = lab.map(({ name: id, item, ...values }) => ({
  id,
  values: Object.entries(values).map(([date, risklevel]) => ({ 
    date: new Date(Date.parse(date)), // Date.parse() is not reliable, but used as example here.
    risklevel: +risklevel 
  }))
}));

console.log(labCheck)
.as-console-wrapper { max-height: 100% !important; top: 0; }

相关文章