在javascript中向数组添加键

在javascript中向数组添加键,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个数据数组,第一行是标题: [["Date", "Key1", "Key2", "Key3", "Key4"], ["2018-11-01", "254", "-", "-", "-"], ["2018-11-02", "648", "-", "-", "-"], ["2018-11-03", "270", "170", "-", "147"], ["2018-11-04", "300", "406", "136", "208"]] 我希望能够将其与D3库图形一起使用的输出是: [[Da

我有一个数据数组,第一行是标题:

[["Date", "Key1", "Key2", "Key3", "Key4"],
["2018-11-01", "254", "-", "-", "-"],
["2018-11-02", "648", "-", "-", "-"],
["2018-11-03", "270", "170", "-", "147"],
["2018-11-04", "300", "406", "136", "208"]]
我希望能够将其与D3库图形一起使用的输出是:

[[Date: "2018-11-01", Key1: "254", Key2: "-", Key3: "-", Key4: "-"],
[Date: "2018-11-02", Key1: "648", Key2: "-", Key3: "-", Key4: "-"],
[Date: "2018-11-03", Key1: "270", Key2: "170", Key3: "-", Key4: "147"],
[Date: "2018-11-04", Key1: "300", Key2: "406", Key3: "136", Key4: "208"]]
我尝试了许多不成功的变体,使用map使用javascript来实现这一点。但我没办法做到。。。关键点是动态的,所以我不能使用固定关键点。 有人能帮我吗? 非常感谢。
Manue

对于对象数组,可以映射值并获取指定给单个对象的映射对象

var数据=[“日期”,“关键字1”,“关键字2”,“关键字3”,“关键字4”],[“2018-11-01”,“254”,“-”,“-”,“-”,[“2018-11-02”,“648”,“-”,“-”,“-”,“-”,[“2018-11-03”,“270”,“170”,“-”,“147”],[“2018-11-04”,“300”,“406”,“136”,“208”],
结果=data.slice(1.map)(a=>Object.assign(…a.map((v,i)=>({[data[0][i]]]:v}));
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您需要将内部数组映射到对象。不能在数组构造中分配键值对

var矩阵=[
[“日期”、“键1”、“键2”、“键3”、“键4”],
[ "2018-11-01", "254", "-", "-", "-" ],
[ "2018-11-02", "648", "-", "-", "-" ],
[ "2018-11-03", "270", "170", "-", "147" ],
[ "2018-11-04", "300", "406", "136", "208" ]
];
log(JSON.stringify(matrixToJsonObjectArray(matrix,true),null,2));
函数矩阵项目对象数组(矩阵,IncludeHeader){
变量字段=includeHeader?矩阵[0]:范围(矩阵[0]。长度);
return(includeHeader?matrix.slice(1):matrix.map(行=>{
var obj={};
fields.forEach((field,i)=>obj[field]=行[i]);
返回obj;
});
}
功能范围(开始、结束){
var-arr=[];
如果(end==未定义)end=start,则start=0;
对于(var i=开始;i<结束;i++)arr.push(i);
返回arr;
}

.as console wrapper{top:0;max height:100%!important;}
您可以创建一个
zipObject
方法,该方法使用将数组转换为对象,并使用它将标头数组与其他数组组合起来:

const data=[“日期”,“键1”,“键2”,“键3”,“键4”],[“2018-11-01”,“254”,“-”,“-”,“-”,[“2018-11-02”,“648”,“-”,“-”,“-”,“-”,[“2018-11-03”,“270”,“170”,“-”,“147”],[“2018-11-04”,“300”,“406”,“136”,“208”];
//将两个数组压缩到一个对象
常量zipObject=(键)=>(值)=>
reduce((r,key,i)=>({…r[key]:value[i]}),{});
//将二维数组转换为对象
const arrToObj=([keys,…value])=>values.map(zipObject(keys));
const result=arrToObj(数据);
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
看起来像一个映射和一个forEach/reduce。。。。展示你尝试过的失败之处非常感谢!这完全符合预期!