本文介绍了重新排列数组以使键具有值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个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; }更多推荐
重新排列数组以使键具有值
发布评论