javascript - 具有来自表 Javascript 的动态属性的对象
问题描述
我有一个表,其中第一行是列的名称(它们的数量不定),我想将此表转换为 javascript 中的对象。
示例表可能如下所示:
Ticket | Created | State
--------+------------+-------
#102314 | 2018-11-12 | 1
#102315 | 2018-11-14 | 5
如果我想把它放在对象中,它看起来像:
var toReturn = [];
var table = [['Ticket', 'Created', 'State'],
['#102314', 2018-11-12, 1],
['#102315', 2018-11-14, 5]];
/*This is how i recieve data from google Spreadsheets*/
for(var k = 1; k < table.length; k++) {
toReturn.push({'Ticket': table[k][0],
'Created': table[k][1],
'State': table[k][2]});
} //This is working for me
// But I'm trying something like this and it not working
for(var k = 1; k < table.length; k++) {
toReturn.push({table[0][0]: table[k][0],
table[0][1]: table[k][1],
table[0][2]: table[k][2]});
}
最终目标是创建具有表中所有属性的对象,而与表中有多少列无关。
解决方案
一种可能的方法是使用Array.prototype.reduce()
该
reduce()
方法在数组的每个成员上执行一个 reducer 函数(您提供),从而产生一个输出值。reducer函数有 四个参数:
- 累加器 (acc)
- 当前值(当前)
- 当前指数 (idx)
- 源数组 (src)
您的 reducer 函数的返回值被分配给累加器,该累加器的值在整个数组的每次迭代中都会被记住,并最终成为最终的单个结果值。
var table = [
['Ticket', 'Created', 'State'],
['#102314', '2018-11-12', 1],
['#102315', '2018-11-14', 5]
];
var transformedTable = table.reduce(function(result, currentRow, rowIndex) {
// skip the "header row"
if (rowIndex === 0) {
return result;
}
// create the actual row from the "header row" and the values of the current row
var row = table[0].reduce(function(resultRow, caption, captionIndex) {
resultRow[caption] = currentRow[captionIndex];
return resultRow;
}, {})
result.push(row);
return result;
}, []);
console.log(transformedTable);
推荐阅读
- parameters - 计算平均值后保存的文件没有任何变化
- apache-spark - repartition(1) - 使加载非常慢
- python - 有没有办法比较多列的每一行值并在数据框中获取最小值以及列名
- python - 无法在 docker 映像中安装任何 jupyterlab 扩展
- javascript - 为什么我无法通过全局 url 访问在谷歌云上部署的 kubernetes 服务?
- reactjs - react-admin中如何处理按钮类型ListItem中的方法类型?
- visual-studio-code - 扩展是否有可能在 VS Code 实例之间共享数据?
- python - 是否可以使用一些基类参数初始化子类,而无需在基类构造函数中显式地将它们作为参数传递?
- go - 禁用 json 绑定验证
- fluent-ui - Fluent-ui - 在 DetailsList 上拖放项目时负责滚动的扩展区域