我有50000行和200列(每行)并尝试从每个行对象中删除所有col对象,现在需要5秒钟才能完成整个过程。有没有更好的方法来提高性能? 注意:有可能跳过一些对象,在这种情况下不要删除skipRows和skipCols对象。
var skipRows = {10:1,11:1,12:1,13:1,14:1,15:1,16:1,17:1,18:1,19:1,20:1};
var skipCols = {50:1,51:1,52:1,53:1,54:1,55:1,56:1,57:1,58:1,59:1,60:1};
for(var i = 0; i < 50000; i++){
if(!(i in skipRows)){
var rowObject = rowColObjects[i];
for ( var j = 0; j < 200; j++){
if(!(j in skipCols)){
delete rowObject[i+"-"+j];
}
}
}
}
下面的是查看示例代码和结果的小提琴:
http://jsfiddle.net/rambabu14/9mcne3en/
谢谢, Rambabu。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果要从删除中跳过某些对象,则
for(var i = 0; i < 50000; i++){
var rowObject = rowColObjects[i];
if (condition)
{
rowObject = {};
}
}
答案 2 :(得分:0)
在我的浏览器(当前最新的Firefox)中,您的原始代码大约需要14秒。然后,我尝试使用我的代码,大约需要6秒。至少,我的代码改善了执行时间。
const newObj = Object.keys(rowColObjects)
.reduce((acc, row) => {
acc[row] = {
id: rowColObjects[row].id,
name: rowColObjects[row].name,
...Object.keys(rowColObjects[row])
.slice(2)
.reduce((acc2, col, i) => {
if (i % 2 !== 0) acc2[col] = rowColObjects[row][col];
return acc2;
}, {})
};
return acc;
}
, {});
另一种方法是将保留 id存储在另一个变量中。
const newObj = Object.keys(rowColObjects)
.reduce((acc, row) => {
acc[rowColObjects[row].id] = Object.keys(rowColObjects[row])
.slice(2)
.filter((_, i) => i % 2 !== 0);
return acc;
}, {});
超级快。仅花了大约2秒钟。然后,您可以创建一种机制来将剩余项目存储回对象。
答案 3 :(得分:0)
Object.keys(rowColObjects).forEach(key => {
const rowObject = rowColObjects[key]
Object.keys(rowObject).forEach(colKey => {
if(!['id', 'name'].includes(colKey)) {
delete rowObject[colKey]
}
})
})