2016-04-15 192 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; 
}, [])