如何基于指定键数组重塑JavaScript数据集对象的结构?
如何按指定键结构将对象转换为带有序数组的新对象?
嘿,我来帮你搞定这个转换需求!你需要把原对象里每个年份的属性,按照KEYS的顺序转换成对应位置为原值、其余为0的数组对吧?先梳理下你的需求细节:
原始代码
const KEYS = ['b', 'a', 'c'] const obj = { 2018: {a: 1, b: 2, c: 3}, 2019: {a: 4, b: 5, c: 6}, 2020: {a: 7, b: 8, c: 9}, }
期望结果
const result = { 2018: { a: [0, 1, 0], b: [2, 0, 0], c: [0, 0, 3] }, 2019: { a: [0, 4, 0], b: [5, 0, 0], c: [0, 0, 6] }, 2020: { a: [0, 7, 0], b: [8, 0, 0], c: [0, 0, 9] }, }
你之前尝试的代码用Object.values(value)直接取值,但没有对应KEYS的顺序,也没为每个单独的键生成专属数组,所以结果和预期不符。下面是实现需求的具体方案:
实现思路
- 遍历原对象的每一组年份与对应数据的键值对
- 对每个年份的数据,针对
KEYS里的每个键:- 创建一个和
KEYS长度相同的全0数组 - 找到当前键在
KEYS中的索引位置,把该位置的值替换为原数据中的对应值
- 创建一个和
- 把处理后的键值对重新组装成目标结构的对象
完整代码
const KEYS = ['b', 'a', 'c'] const obj = { 2018: {a: 1, b: 2, c: 3}, 2019: {a: 4, b: 5, c: 6}, 2020: {a: 7, b: 8, c: 9}, } const result = Object.fromEntries( Object.entries(obj).map(([year, data]) => { // 处理单个年份的所有属性,生成对应数组结构 const processedYearData = Object.fromEntries( KEYS.map(key => { const arr = new Array(KEYS.length).fill(0); const keyIndex = KEYS.indexOf(key); arr[keyIndex] = data[key]; return [key, arr]; }) ); return [year, processedYearData]; }) ); console.log(result);
这段代码运行后就能得到你想要的结果啦!核心是用Object.fromEntries高效地将键值对数组转换为对象,同时通过KEYS.map为每个键生成符合要求的有序数组。
内容的提问来源于stack exchange,提问作者marielle
相关产品推荐
相关产品推荐

