[英]How to iterate an array of objects recursively in TypeScript/Javascript
[英]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.