JavaScript-基于空单元格对CSV字段进行分组

JavaScript-基于空单元格对CSV字段进行分组,javascript,arrays,algorithm,csv,javascript-objects,Javascript,Arrays,Algorithm,Csv,Javascript Objects,我有来自CSV文件的数据,该文件可以有空白字段,并且必须根据这些字段对数据进行分组 下面是一个按位置显示人员数据的简单示例。位置数据仅针对第一个人显示,并且未分配位置的每个后续人员都属于前面的位置: “对象:”[{ 地点:“纽约”, 日期:“2021年10月10日”, 姓名:“Max”, 姓:“佩恩” }, { 地点:“, 日期:“, 姓名:“公爵”, 姓:“努肯” }, { 地点:“, 日期:“, 姓名:“杰克”, 姓:“卡弗” }, { 地点:“拉斯维加斯”, 日期:“2021年10月30日

我有来自CSV文件的数据,该文件可以有空白字段,并且必须根据这些字段对数据进行分组

下面是一个按位置显示人员数据的简单示例。位置数据仅针对第一个人显示,并且未分配位置的每个后续人员都属于前面的位置:

“对象:”[{
地点:“纽约”,
日期:“2021年10月10日”,
姓名:“Max”,
姓:“佩恩”
}, {
地点:“,
日期:“,
姓名:“公爵”,
姓:“努肯”
}, {
地点:“,
日期:“,
姓名:“杰克”,
姓:“卡弗”
}, {
地点:“拉斯维加斯”,
日期:“2021年10月30日”,
姓名:“Leon”,
姓:“肯尼迪”
}, {
地点:“,
日期:“,
名字:“驴子”,
姓“孔”
}, {
地点:“,
日期:“,
姓名:“Ryu”,
姓氏:“Hayabusa”
}]
我需要将人员列表加入一个列表,并将其添加到相应的位置:

“对象:”[{
地点:“纽约”,
日期:“2021年10月10日”,
人员:[{
姓名:“Max”,
姓:“佩恩”
}, {
姓名:“公爵”,
姓:“努肯”
}, {
姓名:“杰克”,
姓:“卡弗”
}]
}, {
地点:“拉斯维加斯”,
日期:“2021年10月30日”,
人员:[{
姓名:“Leon”,
姓:“肯尼迪”
}, {
名字:“驴子”,
姓“孔”
}, {
姓名:“Ryu”,
姓氏:“Hayabusa”
}]
}]
数据最初以数组的形式出现,格式如下:

const[头,…行]=[
[“地点”、“日期”、“姓名”、“姓氏”],
[“纽约”、“2021年10月10日”、“马克斯”、“佩恩”],
[、、“公爵”、“努肯”],
[、、“杰克”、“卡弗”],
[“拉斯维加斯”、“2021年10月30日”、“利昂”、“肯尼迪”],
[“”、“”、“驴子”、“孔”],
[,,,“Ryu”,“Hayabusa”],
];
在这个问题中,我当前必须将数组转换为第一个对象列表的代码如下:

const locations=line.map((line)=>
line.reduce((对象、值、索引)=>
({…对象,[headers[index]]:value})
, {}
));
解决这个问题的好方法是什么?

下面是一个使用和硬编码标题名称的示例

const
[标题,…行]=[“地点”、“日期”、“姓名”、“姓氏”]、[“纽约”、“2021年10月10日”、“马克斯”、“佩恩”]、[“”、”“杜克”、“纽肯”]、[“”、”“杰克”、“卡弗”]、[“拉斯维加斯”、“2021年10月30日”、“利昂”、“肯尼迪”]、[“”、”“驴子”、“孔”]、[“”、”“吕、哈雅布萨”]、]、,
结果=行。减少((a[地点、日期、姓名])=>{
if(地点和日期)a.push({地点、日期、人员:[]});
a[a.length-1].persons.push({姓名,姓氏});
返回a;
}, []);
log(JSON.stringify(result,null,2))

作为控制台包装{max height:100%!重要;top:0;}
这是一个很好的包装!不幸的是,在我的用例中,我相信标题可能会有所不同,例如,我可以有人的出生日期或年龄,或者在城市中有更多的其他字段。