Javascript 将嵌套数组转换为对象数组问题

Javascript 将嵌套数组转换为对象数组问题,javascript,arrays,object,javascript-objects,Javascript,Arrays,Object,Javascript Objects,我正在尝试将这个嵌套数组数据转换为一个对象数组。这是数据 const tableData = [ ["first_name", "last_name", "city", "state"], ["June", "Gregory", "Hammond", "IN"], ["James", "Wynn", "Gary", "IN"], ["Craig", "Norman", "Schererville", "IN"] ] 下面是输出应该是什么 [ { fi

我正在尝试将这个嵌套数组数据转换为一个对象数组。这是数据

  const tableData = [
    ["first_name", "last_name", "city", "state"],
    ["June", "Gregory", "Hammond", "IN"],
    ["James", "Wynn", "Gary", "IN"],
    ["Craig", "Norman", "Schererville", "IN"]
  ]
下面是输出应该是什么

[
  { first_name : "June", last_name : "Gregory", city: "Hammond", state : "IN" },
  { first_name : "James", last_name : "Wynn", city: "Gary", state : "IN" },
  { first_name : "Craig", last_name : "Norman", city: "Schererville", state : "IN" }
]
这是我的密码

    function convertTable(table_data) {
var result = []
var key, value
for (var i=0; i<table_data.length; i++) {
  var employee = {}
  for (var j=0; j<table_data[i].length; j++) {
    key = table_data[i][j][0]
    value = table_data[i][j][1]
    employee[key] = value
   }
   result.push(employee)
  }
  return result
 }

  var input = [
    ["first_name", "last_name", "city", "state"],
    ["June", "Gregory", "Hammond", "IN"],
    ["James", "Wynn", "Gary", "IN"],
    ["Craig", "Norman", "Schererville", "IN"]
  ]

console.log(convertTable(input));
函数转换表(表_数据){
var结果=[]
变量键,值

对于(var i=0;i首先,两个值都使用一个字符,这是不必要的

key = table_data[i][j][0]
//                    ^^^
value = table_data[i][j][1]
//                      ^^^
然后您需要两个更改,一个是外部循环省略键,而内部使用第一行作为键。请参见代码中的注释

另一个更改是在函数顶部声明所有变量

函数转换表(表_数据){
var结果=[],
关键,价值,,
雇员,,
i、 j;
对于(i=1;i
。作为控制台包装{max height:100%!important;top:0;}
试试这个

你只是把一些索引放错了地方,除了一切都很好。 只要与你的功能相匹配,你就能很容易地找到你错过的地方。
const tableData=[
[“名”、“姓”、“市”、“州”],
[“六月”、“格雷戈里”、“哈蒙德”、“在”],
[“詹姆斯”、“韦恩”、“加里”、“在”],
[“克雷格”、“诺曼”、“舍尔维尔”、“在”]
]
函数转换表(表_数据){
var结果=[]
变量键,值

对于(var i=1;i您访问的是根数组上的
3级
深度,因此您可以在
2级
数组中索引字符串

使用此命令:
key=table_data[i][j][0]
访问索引
i
上数组中放置的
j
字符串的第一个字符

使用这个:
value=table_data[i][j][1]
您正在访问索引
i
上数组中放置的
j
字符串的第二个字符

另外,您已经知道第一个数组是键(或头),因此不想在其上循环。请查看下一个示例:

函数转换表(表_数据)
{
var结果=[];
var键,值;
对于(变量i=1;iconsole.log(convertable(input));
您的代码包含三个错误,可以按如下方式修复:

  • i=1
    开始迭代外部循环以跳过索引为0的标题

  • 使用
    tableData[0][j]
    而不是
    tableData[i][j][0]
    索引到标题数组中,这是一个维度太多(访问字符),并且不正确地包含行索引
    i

  • 使用
    tableData[i][j]
    而不是
    tableData[i][j][1]
    索引到数据表中,后者再次访问字符串中的字符

  • 除此之外,我建议注意间距、分号和大小写约定。这将使您的代码更易于理解和调试

    综合起来可以得出:

    函数转换表(tableData){
    var结果=[];
    var键;
    var值;
    对于(var i=1;iconsole.log(convertable(input));
    这是一个简洁的版本,使用:

    const data=[[“名字”、“姓氏”、“城市”、“州”]、[“六月”、“格雷戈里”、“哈蒙德”、“IN”]、[“詹姆斯”、“韦恩”、“加里”、“IN”]、[“克雷格”、“诺曼”、“舍尔维尔”、“IN”]]
    const result=data.reduce((r,c,i,arr)=>{
    如果(i)r.push(c.reduce((a,b,j)=>(a[arr[0][j]]=b,a),{}))
    返回r
    }, [])
    
    console.log(result)
    -1,还没有足够的减少;):)有没有“足够的减少”这样的说法?请看一下:。如果答案对你有帮助,请遵循这些建议。请记住,人们会花时间和精力帮助你,并会感谢你的反馈。下面有一些不错的答案。。。