繁体   English   中英

将具有第一行标题的二维数组转换为 object JavaScript

[英]Convert a 2D array with first rows a headers to object JavaScript

我有一个数组,其第一行为 header:

array = [[ 'combi', 'DQ#', 'sd', 'Level 3', 'Level 6', 'Level 7' ], [ 'DQn DQDC Simple','DQn',  'DQDC', 'Simple', 'Simple_A7',  0.262],[ 'DQn DQDC Simple1','DQn',  'DQDC', 'Simple1', 'Simple_A7',  0.264]]

将其转换为 json object 格式:

new_obj = [{"combi":"DQ8 DQDC Simple","DQ#":"DQ8","Level 3":"DQDC","Level 6":"Simple","Level 7":"Simple_A7","sc_7":0.262}, {"combi":"DQ8 DQDC Simple1","DQ#":"DQ8","Level 3":"DQDC","Level 6":"Simple1","Level 7":"Simple_A7","sc_7":0.264}]

我试过在 StackOverflow 上搜索很多,但没有找到答案。 任何建议将不胜感激

解构数组,获取键(第一项)和值(其余项)。 Map 是 values 数组,然后是 map 每个子数组的 values,通过 value 取各自的 key,并返回一对[key, value] 使用Object.fromEntries()将数组对转换为 object :

 const fn = ([keys, ...values]) => values.map(vs => Object.fromEntries(vs.map((v, i) => [keys[i], v]))) const array = [[ 'combi', 'DQ#', 'sd', 'Level 3', 'Level 6', 'Level 7' ], [ 'DQn DQDC Simple','DQn', 'DQDC', 'Simple', 'Simple_A7', 0.262],[ 'DQn DQDC Simple1','DQn', 'DQDC', 'Simple1', 'Simple_A7', 0.264]] const result = fn(array) console.log(result)

另一种选择是使用Array.reduce()而不是Array.map()Object.entries()创建对象:

 const fn = ([keys, ...values]) => values.map(vs => vs.reduce((acc, v, i) => (acc[keys[i]] = v, acc), {})) const array = [[ 'combi', 'DQ#', 'sd', 'Level 3', 'Level 6', 'Level 7' ], [ 'DQn DQDC Simple','DQn', 'DQDC', 'Simple', 'Simple_A7', 0.262],[ 'DQn DQDC Simple1','DQn', 'DQDC', 'Simple1', 'Simple_A7', 0.264]] const result = fn(array) console.log(result)

我们也可以使用扩展初始数组并分隔键和值列表来实现这一点,如下所示。

 let array = [['combi', 'DQ#', 'sd', 'Level 3', 'Level 6', 'Level 7'], ['DQn DQDC Simple', 'DQn', 'DQDC', 'Simple', 'Simple_A7', 0.262], ['DQn DQDC Simple1', 'DQn', 'DQDC', 'Simple1', 'Simple_A7', 0.264]]; //Separate Keys and Values into different variables const [keysList, ...valuesList] = array; //Loop through the values list const result = valuesList.map(values => { let obj = {}; //Since each element in values list is a list again //loop through the list and add them to the `obj` object values.forEach((val, i) => { obj[keysList[i]] = val }); //return the object return obj; }); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM