Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使第一个数组成为对象的标题和剩余数组行_Javascript - Fatal编程技术网

Javascript 如何使第一个数组成为对象的标题和剩余数组行

Javascript 如何使第一个数组成为对象的标题和剩余数组行,javascript,Javascript,我是新的编码和试图得到这个问题的权利。我尝试调用数组的索引,但它会打印出列。我们的开发环境是REPL.it,虚拟机使用节点v10.16.0,非常感谢您的帮助 输入 tableData = [ ["first_name", "last_name", "city", "state"], ["Elisabeth", "Gardenar", "Toledo", "OH"], ["Jamaal", "Du", "Sylvania", "OH"], ["Kathlyn", "

我是新的编码和试图得到这个问题的权利。我尝试调用数组的索引,但它会打印出列。我们的开发环境是REPL.it,虚拟机使用节点v10.16.0,非常感谢您的帮助

输入

tableData = [
    ["first_name", "last_name", "city", "state"],
    ["Elisabeth", "Gardenar", "Toledo", "OH"],
    ["Jamaal", "Du", "Sylvania", "OH"],
    ["Kathlyn", "Lavoie", "Maumee", "OH"]
]
output = [
    { first_name : "Elisabeth", last_name : "Gardenar", city: "Toledo", state : "OH" },
    { first_name : "Jamaal", last_name : "Du", city: "Sylvania", state : "OH" },
    { first_name : "Kathlyn", last_name : "Lavoie", city: "Maumee", state : "OH" }
]
所需输出

tableData = [
    ["first_name", "last_name", "city", "state"],
    ["Elisabeth", "Gardenar", "Toledo", "OH"],
    ["Jamaal", "Du", "Sylvania", "OH"],
    ["Kathlyn", "Lavoie", "Maumee", "OH"]
]
output = [
    { first_name : "Elisabeth", last_name : "Gardenar", city: "Toledo", state : "OH" },
    { first_name : "Jamaal", last_name : "Du", city: "Sylvania", state : "OH" },
    { first_name : "Kathlyn", last_name : "Lavoie", city: "Maumee", state : "OH" }
]
到目前为止,我尝试的是:

function convertTable(){
    var p=console.log;
    const [header,...rows] = tableData;
    var tableObj = new Object;
    var intermediateVal = [];
    var finalArr = [];
    for(var vals=0;vals<rows.length;vals++){
        var row = rows[vals]
        for (var key=0,val=0;key<header.length;key++,val++){
            tableObj[header[key]]=row[val]
        }
    p(tableObj)
  }
} 
convertTable(tableData)
函数转换表(){
var p=console.log;
常量[标题,…行]=表格数据;
var tableObj=新对象;
var中间值=[];
var finalArr=[];

对于(var-vals=0;vals,您已经非常接近了,但是您需要为结果的每一行创建一个新对象,然后将该对象推送到
finalArr
数组中

也不需要
key
val
变量,因为它们总是相同的

tableData=[
[“名”、“姓”、“市”、“州”],
[“伊丽莎白”、“加德纳”、“托莱多”、“哦”],
[“Jamal”、“Du”、“Sylvania”、“噢”],
[“Kathlyn”、“Lavoie”、“Maumee”、“噢”]
];
函数转换表(){
var p=console.log;
常量[标题,…行]=表格数据;
var finalArr=[];
对于(var VAL=0;VALconvertTable(tableData)
您还可以利用数组中包含的reduce方法

tableData = [
    ["Elisabeth", "Gardenar", "Toledo", "OH"],
    ["Jamaal", "Du", "Sylvania", "OH"],
    ["Kathlyn", "Lavoie", "Maumee", "OH"]
];

const obj = tableData.reduce((acc, cv, index) => {
        acc.push({
            first_name: cv[0],
            last_name: cv[1],
            city: cv[2],
            state: cv[3]
        });
        return acc
},[]);

console.log(obj); 
// [ { first_name: 'Elisabeth',
//    last_name: 'Gardenar',
//    city: 'Toledo',
//    state: 'OH' },
//  { first_name: 'Jamaal',
//    last_name: 'Du',
//    city: 'Sylvania',
//    state: 'OH' },
//  { first_name: 'Kathlyn',
//   last_name: 'Lavoie',
//    city: 'Maumee',
//   state: 'OH' } ]


下面是一个使用array reduce的潜在解决方案

const tableData=[
[“名”、“姓”、“市”、“州”],
[“伊丽莎白”、“加德纳”、“托莱多”、“哦”],
[“Jamal”、“Du”、“Sylvania”、“噢”],
[“Kathlyn”、“Lavoie”、“Maumee”、“噢”]
];
const keys=tableData.shift();
const formatted=tableData.reduce((agg,arr)=>{
累计推送(arr.reduce)(对象、项目、索引)=>{
obj[键[索引]]=项;
返回obj;
}, {}));
返回agg;
}, [])

console.log(格式化);
另一种功能方法

const tableData=[
[“名”、“姓”、“市”、“州”],
[“伊丽莎白”、“加德纳”、“托莱多”、“哦”],
[“Jamal”、“Du”、“Sylvania”、“噢”],
[“Kathlyn”、“Lavoie”、“Maumee”、“噢”]
]
常量[键,…值]=表格数据
常量获取值=(行)=>{
常量[名字、姓氏、城市、州]=行
返回{姓、名、市、州}
}
常量输出=values.map(获取值)
console.log(输出)

太长了,读不下去了,谢谢。谢谢你的评论,但是对象键必须是动态的,不是静态的。否则我会用这个方法。谢谢你的评论,但是对象键必须是动态的而不是静态的。地图种类让我困惑,我真的无法进入它。TL;Dr:谢谢,这是很棒的工作。Acutar评论:NICK!!!!!!!!!!!这是个怪物!令人惊讶。我只是觉得很难理解。我对编程非常陌生。如果我的老师将我的代码与你的代码进行比较,他们就会知道我在作业中作弊。我在行上尝试了
Array.shift()
方法。我没有想到要将它用作标题。我很沮丧,“为什么我不能让shift()在循环中循环!!”因为这毫无意义。但是你很了不起。