Javascript 使用java脚本从对象中删除项的更好方法是什么

Javascript 使用java脚本从对象中删除项的更好方法是什么,javascript,performance,javascript-objects,Javascript,Performance,Javascript Objects,我有50000行和200列(每行上),试图从每行对象中删除所有col对象,现在完成整个过程需要5秒钟。有没有更好的方法来提高性能? 注意:可能会跳过某些对象,在这种情况下,不要删除SkipRous和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,6

我有50000行和200列(每行上),试图从每行对象中删除所有col对象,现在完成整个过程需要5秒钟。有没有更好的方法来提高性能? 注意:可能会跳过某些对象,在这种情况下,不要删除SkipRous和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];
        }
     } 
  }
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};
对于(变量i=0;i<50000;i++){
如果(!(我在船头){
var rowObject=rowColObjects[i];
对于(var j=0;j<200;j++){
如果(!(skipCols中的j)){
删除行对象[i+“-”+j];
}
} 
}
}

下面是查看示例代码和结果的提琴:

谢谢,
Rambau.

为什么不重新初始化它,而不是遍历所有键并删除它们

rowColObjects={}


如果要跳过某些对象的删除,请参见此处的性能

for(var i = 0; i < 50000; i++){
   var rowObject = rowColObjects[i];
   if (condition)
   {
      rowObject = {};
   }
}
for(变量i=0;i<50000;i++){
var rowObject=rowColObjects[i];
如果(条件)
{
rowObject={};
}
}
在我的浏览器(当前最新的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秒钟。然后,您可以创建一个机制来将剩余的项存储回对象。

根据您的描述,
rowColObjects=[]
应该可以正常工作。@georg您的意思是
rowColObjects={}
?我是说var rowColObjects={};添加对象的示例代码:var rowColObjects={};for(var i=0;i<50000;i++){var rowObjects={id:i,name:“rowObject”+i};for(var j=0;j<200;j++){rowObjects[i+“-”+j]={id:j,name:“coloobject”+j};}rowColObjects[i]=rowObjects;}因为您迭代了对象的
50000
元素,所以花了5秒钟。@georg感谢您的回答,但我想跳过一些对象以执行删除操作。我们需要放置条件删除列对象,正确更新问题。删除对象之前有一个条件。谢谢您,你能在下面的提琴中更新吗?skiprows和skipCols将动态变化,我正在使用chrome和IET谢谢大家,这个问题是通过只添加必需的对象而不是删除所有对象来解决的。以下是JSFIDLE:
Object.keys(rowColObjects).forEach(key => {
    const rowObject = rowColObjects[key]
    Object.keys(rowObject).forEach(colKey => {
        if(!['id', 'name'].includes(colKey)) {
            delete rowObject[colKey]
        }
    })
})