2016-04-15 81 views
1

我正在解析一个excel文件,它有7列和超过300k行。Javascript对象创建 - 创建多个对象

我需要创建对象(Nodejs端)并在数据库中进行批量插入。

我想知道为此目的创建大量对象的最佳方法是什么。

我想出了三种方法,并且不知道哪一个会是窝在速度和内存方面:

第一:

var bulkObjects = []; 
worksheet.eachRow({includeEmpty: true}, function (row, rowNumber) { 
    var currentObject = createRowObject(row.values);  
    bulkObjects.push(currentObject); 
}); 

function createRowObject(row) {  

    return { 
     Row1: row[1], 
     Row2: row[2], 
     Row3: row[3], 
     Row4: row[4], 
     Row5: row[5], 
     Row6: row[6] 
    } 
} 

二:

var bulkObjects = []; 
worksheet.eachRow({includeEmpty: true}, function (row, rowNumber) { 
    var currentObject = **new** createRowObject(row.values);  
    bulkObjects.push(currentObject); 
}); 

function createRowObject(row) { 

    this.Row1: row[1], 
    this.Row2: row[2], 
    this.Row3: row[3], 
    this.Row4: row[4], 
    this.Row5: row[5], 
    this.Row6: row[6]  
} 

第三种:

var bulkObjects = []; 
worksheet.eachRow({includeEmpty: true}, function (row, rowNumber) { 
    var currentObject = createRowObject(row.values); 
    bulkObjects.push(currentObject); 
}); 

function createRowObject(row) { 

    var o = new Object(); 
    o["Row1"] = row[1]; 
    o["Row2"] = row[2]; 
    o["Row3"] = row[3]; 
    o["Row4"] = row[4]; 
    o["Row5"] = row[5]; 
    o["Row6"] = row[6]; 

    return o; 
} 

哪一个最适合创建大量对象。有没有另一种方法?

+0

你为什么不建立一个测试与性能分析JavaScript性能检查? –

+0

可能的重复[哪种方式最适合在javascript中创建对象?在变量的对象之前必须是“var”](http://stackoverflow.com/questions/6843951/which-way-is-best-for-creating-an-object-in-javascript-is-var-necessary- befor) –

+1

如果内存是一个问题,最好的办法是做批量bulkObjects的多次插入,而不是一次全部完成,因此所有已经插入的对象都可以被垃圾收集。关于对象的创建,由于对象上没有方法,所有3个方法应该以相同的速度运行,所以请选择更简单的方法。您甚至可以通过删除函数调用并直接推送对象来简化它。 – Shilly

回答

1

我建议如果您在服务器端使用节点js,那么您应该尝试使用Loadash库来实现更快和无错误的对象转换。

试试这个

var objectMappingHeaders = ['Row1','Row2','Row3','Row4','Row5','Row6','Row7']; 
var data = [[1,2,3,4,5,6,7],['a','b','c','d','e','f','g']]; 

var output = _.reduce(data, function(result, val) { 
    result.push(_.zipObject(objectMappingHeaders, val)); 
    return result; 
}, [])