重新排列数组以使键具有值
我有一个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; }
相关文章