我有一个表示数据库中行的二维数组。我正在使用officeJS来加载和操作Excel中的数据。我更新,插入和删除行。我面临的挑战是我需要弄清楚已更改的行(插入,删除或更新),以便我只能更新数据库中的那些行。我正在为已更新和插入的行发送一个查询,并为已删除的行发送一个查询。我可以使用lodash为5000行和10列的数据执行此操作。我想将其扩展为更大的数据集,我想知道我目前正在做什么的替代方案。下面是我用来找到差异的代码。
insertedOrUpdatedRows = _.differenceWith(modifiedData, originalData, _.isEqual);
deletedRows = _.differenceWith(originalData, modifiedData, compareFunction);
function compareFunction(a, b) {
if(a[0] == b[0]) {
return true;
}
else
return false;
}
示例数据数组
[[1,数据,数据,数据], [2,数据,数据,数据]]
第一个元素是主键。
答案 0 :(得分:0)
因为你已经提到你的Javascript引擎崩溃了(它不应该是50,000行 - 所以我会重新审视逻辑),我建议使用Lodash的_.chunk
函数来分块数据:
_.chunk(modifiedData, modifiedData.length/500).map({
...
...
});
答案 1 :(得分:0)
好的,我使用以下逻辑。不确定为什么它在50K行崩溃。 OriginalData和ModifiedData采用上述示例2D数组的格式。
var originalDataStrings = [];
var modifiedDataStrings = [];
var insertedOrUpdatedRows;
originalData.forEach(function(row){
originalDataStrings.push(JSON.stringify(row));
});
modifiedData.forEach(function(row){
modifiedDataStrings.push(JSON.stringify(row));
})
insertedOrUpdatedRows = _.differenceWith(modifiedDataStrings, originalDataStrings, _.isEqual);
console.log(insertedOrUpdatedRows);