You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定键数组重塑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的顺序,也没为每个单独的键生成专属数组,所以结果和预期不符。下面是实现需求的具体方案:

实现思路

  1. 遍历原对象的每一组年份与对应数据的键值对
  2. 对每个年份的数据,针对KEYS里的每个键:
    • 创建一个和KEYS长度相同的全0数组
    • 找到当前键在KEYS中的索引位置,把该位置的值替换为原数据中的对应值
  3. 把处理后的键值对重新组装成目标结构的对象

完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:07:45