例如,假设我在两个不同的单独的csv文件中有以下数据:
population.csv:
city | State | Population
-----------------------------------------
Seattle | Washington | 63269
Birmingham | Alabama | 212113
字符串
temperature.csv:
index | city | JAN | FEB | ANN
-----------------------------------------
0 | Birmingham | 46 | 53 |
3 | Juneau | 19 | 25 | 38
型
我如何从这2个csv文件中合并相应的数据(根据每一行是否为同一城市),以便我的数据和列合并形成以下内容(如果没有重叠,请将这些行留空):
index | city | JAN | FEB | ANN | State | Population
-------------------------------------------------------------------------
0 | Birmingham | 46 | 53 | | Alabama | 212113
3 | Juneau | 19 | 25 | 38 | |
| Seattle | | | | Washington | 63269
型
时间复杂度为O(n^2):
const popRows = await parse(fs.readFileSync('./data/population.csv', 'utf8'), {
columns: true,
delimiter: ',',
});
const tempRows = await parse(fs.readFileSync('./data/temperature.csv', 'utf8'), {
columns: true,
delimiter: ',',
});
const combinedRows = [];
popRows.forEach(popRow => {
tempRows.forEach(tempRow => if (popRow.city === tempRow.city) combinedRows.push({...popRow, ...tempRow}))
});
型
我是在正确的轨道上,还是有一个不同的方式,我应该接近这个?任何指导或链接到一个类似的问题,以及他们如何解决它将不胜感激。谢谢。
1条答案
按热度按时间a8jjtwal1#
这似乎是一个合理的解决方案,但是,如果你能保证两个工作表有相同的行数,你可以把它减少到一个循环:
字符串
如果你希望数据的排序顺序相同,你可以在for循环中做其他的验证,比如确保
popRows[i].city === tempRows[i].city
。我同意@cbr的观点,如果你想支持无序数据,使用Map是一个很好的解决方案。