繁体   English   中英

数据集到 Javascript/Typescript 中的对象数组

[英]Dataset to an array of objects in Javascript/Typescript

我有两个数组的输入对象

payload 

columns:["col1" , "col2","col3"],
data: ["col1value1","col2value1" , "col1value3"] ,
      ["col1value2","col2value2" , "col1value2"]
 

现在我想转换这两个对象数组,如下面的 output = [];

[
  { col1: 'col1value1', col2: 'col2value1', col3: col1value3},
  { col1: 'col1value2', col2: 'col2value2', col3: col1value2}
]

尝试使用reduce 或其他方法——但没有得到它——必须对数据数组中的列索引进行硬编码。 有没有更好更快的方法? 它将在不硬编码列名的情况下完成。

目前做喜欢

const indexofCol1= this.payload.columns.indexOf["col1"]

然后使用该索引映射到data数组中以获取所有值——这不是一个好方法。

您可以将.map()Object.fromEntries()结合使用。 由于您想将data数组映射到对象,您可以先对其调用.map() 对于每个内部数组(引爆为row ),您可以使用Object.fromEntries()构建一个对象。 fromEntries()方法采用[[key, value], ...]对数组,您可以构建映射cols数组,其中每个键是来自cols的值,每个值是当前row的关联项大批。

请参阅下面的示例:

 const cols = ["col1" , "col2","col3"]; const data = [["col1value1","col2value1" , "col1value3"], ["col1value2","col2value2" , "col1value2"]]; const res = data.map(row => Object.fromEntries( cols.map((key, i) => [key, row[i]]) )); console.log(res);
 .as-console-wrapper { max-height: 100% !important;} /* ignore */

如果您不能支持Object.fromEntries() ,您可以使用上述使用Object.assign()传播语法的更浏览器友好的版本:

 const cols = ["col1" , "col2","col3"]; const data = [["col1value1","col2value1" , "col1value3"], ["col1value2","col2value2" , "col1value2"]]; const res = data.map(row => Object.assign({}, ...cols.map((key, i) => ({[key]: row[i]})) )); console.log(res);
 .as-console-wrapper { max-height: 100% !important;} /* ignore */

暂无
暂无

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

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