我需要将两个JavaScript数组转换为对象列表。其中一个输入数组表示输出对象的键,另一个包含其值(以及一些其他信息,与此问题无关)。
示例数据:
示例数据:
let theKeys = ['firstName', 'lastName', 'city'];
let theValues = [{data: [['John', 'Smith', 'New York'],
['Mike', 'Doe', 'Chicago'],
...
],
otherStuff: ...}
];
上述所需的输出:
output = [{
firstName: 'John',
lastName: 'Smith',
city: 'New York'
},
{
firstName: 'Mike',
lastName: 'Doe',
city: 'Chicago',
},
...
]
这只是一个例子,我的实际数据来自REST响应,内容和长度都可能会有所不同。我正在使用Vue应用程序显示表格数据。
下面是我的现有代码,适用于少量数据,但对于大量数据将导致所有浏览器崩溃或挂起。
return this.theValues.flatMap(results => {
let jsonified = [];
for (let v = 0; v < results.theValues.length; v++) {
let singleJson = {};
for (let k = 0; k < this.theKeys.length; k++) {
let key = this.theKeys[k];
singleJson[key] = results.data[v][k];
}
jsonified.push(singleJson);
}
return jsonified;
});
对于仅有几千个结果,这需要几分钟才能运行。我该如何使它更快?是否有一些操作可以避免嵌套的for循环?
this.theKeys.length
看起来很奇怪...theValues
来自同一响应,但不包括theKeys
?我认为你的问题不是性能本身,而是 Vue 中的某些竞争条件。 - Washington Guedesconsole.time('test')
,并在返回之前加入console.timeEnd('test')
,以查看经过的时间。 - Washington GuedestheValues
的调用上,它实际上是我正在工作的组件的一个属性。我用Math.random()
替换了它,然后一切都变得非常快。我认为现在是时候提出一个更专注于Vue的新问题了。 - SOLO