【发布时间】:2017-03-30 01:49:51
【问题描述】:
我想使用 JavaScript 或 Angularjs 或任何 JavaScript 库将此示例数据集复制到嵌套 JSON 中。
数据:
PrimaryId,FirstName,LastName,City,CarName,DogName
100,John,Smith,NewYork,Toyota,Spike
100,John,Smith,NewYork,BMW,Spike
100,John,Smith,NewYork,Toyota,Rusty
100,John,Smith,NewYork,BMW,Rusty
101,Ben,Swan,Sydney,Volkswagen,Buddy
101,Ben,Swan,Sydney,Ford,Buddy
101,Ben,Swan,Sydney,Audi,Buddy
101,Ben,Swan,Sydney,Volkswagen,Max
101,Ben,Swan,Sydney,Ford,Max
101,Ben,Swan,Sydney,Audi,Max
102,Julia,Brown,London,Mini,Lucy
Javascript:
var file = reader.result;
var singleRow = readerFile.split(/\r\n|\n/);
var header = singleRow[0].split(',');
var result =[];
for ( var i=1; i < file.length; i++ ){
var elementData = singleRow[i].split(',');
elementData = elementData.filter(function(n){ return n != "" });
var Obj = {};
for ( var j=0; j < header.length; j++ ){
Obj[header[j]] = elementData[j];
/*
- How can i build child object and append back to Obj before j loop
- How can i build multiple child for same parent
*/
}
result.push(Obj);
}
console.log(" Print the JSON Object : " + JSON.stringify(result));
期望的输出:
{
"data": [
{
"City": "NewYork",
"FirstName": "John",
"PrimaryId": 100,
"LastName": "Smith",
"CarName": [
"Toyota",
"BMW"
],
"DogName": [
"Spike",
"Rusty"
]
},
{
"City": "Sydney",
"FirstName": "Ben",
"PrimaryId": 101,
"LastName": "Swan",
"CarName": [
"Volkswagen",
"Ford",
"Audi"
],
"DogName": [
"Buddy",
"Max"
]
},
{
"City": "London",
"FirstName": "Julia",
"PrimaryId": 102,
"LastName": "Brown",
"CarName": [
"Mini"
],
"DogName": [
"Lucy"
]
}
]
}
如果 Firstname、Lastname 和 City 具有相同的值,则 CarName 和 DogName 值应该是同一父级下的子对象
【问题讨论】:
-
There's no such thing as a "JSON object". 无论如何,它只是应该用于分组数据的
PrimaryId字段吗?也就是说,假设给定 ID 将始终具有相同的名字和姓氏和城市是否安全,或者这些字段也可能最终成为给定 ID 中的数组?一个完全通用的解决方案需要允许任何重复的字段,但如果它只有两个特定字段并且字段名称始终相同,那么不太通用的代码可能会更简单。 -
我不知道正确和详细的答案,但我认为您应该查看 hashmap 或 hashtable 数据结构,其中具有特定键的对象只能出现一个。只需遍历所有行并搜索 id,如果不存在,则创建一个新的。然后根据它是单值还是多值来更新或添加所有其他字段。
-
@nnnnnn 谢谢你,我纠正了我的问题。是的,我们可以假设 3 列条目是相同的
标签: javascript arrays json javascript-objects