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

如何将嵌套数组首元素设为对象键并构建目标JavaScript对象

问题描述

给定如下JavaScript数组:

var values = Array ( );

values [0] = Array ("", "Guest1", "Guest2", "Guest3")
values [1] = Array ("Name", "Hans", "Carl", "Peter")
values [2] = Array ("City", "Berlin", "Tokio", "Washington")
values [3] = Array ("Phone", "123", "234", "345")

希望将其转换为如下结构的对象:

var data= {
   Guest1: { "Name" : "Hans", "City" : "Berlin", "Phone" : "123" },
   Guest2: { "Name" : "Carl", "City" : "Tokio", "Phone" : "234" },
   Guest3: { "Name" : "Peter", "City" : "Washington", "Phone" : "345" },
};

目前已经通过以下代码获取了初始键,但不清楚如何完成剩余部分的构建:

const data = Object.fromEntries(values[0].map(key => [key, 0]));
delete data[""];

解决方案

这里提供几种实用的实现方式,帮你完成目标对象的构建:

方式一:硬编码属性(适合固定属性场景)

先提取访客名称,再直接为每个访客绑定对应属性值:

// 提取所有访客名称(跳过第一个空字符串)
const guests = values[0].slice(1);
const data = {};

guests.forEach((guestName, index) => {
  // 从属性行中取对应索引的值
  data[guestName] = {
    Name: values[1][index + 1],
    City: values[2][index + 1],
    Phone: values[3][index + 1]
  };
});

方式二:动态遍历属性(扩展性更强)

如果后续可能新增属性行,这种方式不需要修改代码,自动适配:

const guests = values[0].slice(1);
const data = {};

// 遍历每个访客
guests.forEach((guestName, guestIndex) => {
  const guestInfo = {};
  // 遍历所有属性行(跳过第一行的访客名称)
  for (let i = 1; i < values.length; i++) {
    const [propName, ...propValues] = values[i];
    guestInfo[propName] = propValues[guestIndex];
  }
  data[guestName] = guestInfo;
});

基于你现有代码的改进

你已经拿到了访客键,只需要把每个键对应的子对象填充完整即可:

// 初始化为空对象,而非0
const data = Object.fromEntries(values[0].map(key => [key, {}]));
delete data[""];

// 遍历属性行填充数据
for (let i = 1; i < values.length; i++) {
  const [propName, ...propValues] = values[i];
  propValues.forEach((value, index) => {
    const guestName = values[0][index + 1];
    data[guestName][propName] = value;
  });
}

内容的提问来源于stack exchange,提问作者Co0n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:05:22