[英]Struggling with re-organisation of Json data structure
我正在尝试转换此JSON:
[
[
{
"id": 1,
"ac": 1
},
{
"id": 2,
"ac": 1
},
{
"id": 3,
"ac": 1
}
],
[
{
"id": 1,
"ac": 1
},
{
"id": 2,
"ac": 1
},
{
"id": 3,
"ac": 0
}
],
[
{
"id": 1,
"ac": 1
},
{
"id": 2,
"ac": 1
},
{
"id": 3,
"ac": 0
}
],
[
{
"id": 1,
"ac": 1
},
{
"id": 2,
"ac": 0
},
{
"id": 3,
"ac": 0
}
],
[
{
"id": 1,
"ac": 1
},
{
"id": 2,
"ac": 0
},
{
"id": 3,
"ac": 0
}
],
[
{
"id": 1,
"ac": 1
},
{
"id": 2,
"ac": 0
},
{
"id": 3,
"ac": 0
}
]
]
进入该数据结构:
[
[
{
"id": 1,
"ac": [1,1,1,1,1,1]
}
],
[
{
"id": 2,
"ac": [1,1,1,0,0,0]
}
],
[
{
"id": 3,
"ac": [1,0,0,0,0,0]
}
]
]
我正在使用JavaScript /节点来执行此操作,但无法使其正常工作。 谁能帮我写一个可以做到的循环?
编辑:我尝试的是以下内容,但我想它并没有太大帮助,因为它仍然不是我需要的输出
var acc_array = [];
var a_id;
for(var y=0; y<data.length; y++) { //151
if(y<data.length-1){
a_id = data[y].a_id;
if(a_id == data[y].a_id) {
acc_array[y] = new Array();
acc_array[y].push(data[y].acc);
}
}
if(y==data.length-1){
acc_array[y] = new Array();
a_id = data[y].a_id;
if(a_id == data[y].a_id) {
acc_array[y].push(data[y].acc);
}
jsonfile.writeFile("a.json", acc_array, function (err) {
console.log(err);
});
}
}
您可以采用嵌套循环和哈希表来收集具有相同id
项目。
var data = [[{ id: 1, ac: 1 }, { id: 2, ac: 1 }, { id: 3, ac: 1 }], [{ id: 1, ac: 1 }, { id: 2, ac: 1 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 1 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 0 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 0 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 0 }, { id: 3, ac: 0 }]], hash = Object.create(null), result = []; data.forEach(function (a) { a.forEach(function (o) { hash[o.id] || result.push(hash[o.id] = { id: o.id, ac: [] }); hash[o.id].ac.push(o.ac); }); }); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Array#将所有内容都组合到单个数组中,然后将Array#reduce与帮助器对象一起使用以获取所需对象的数组:
var data = [[{"id":1,"ac":1},{"id":2,"ac":1},{"id":3,"ac":1}],[{"id":1,"ac":1},{"id":2,"ac":1},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":1},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":0},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":0},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":0},{"id":3,"ac":0}]]; var hash = Object.create(null); var result = [].concat(...data) .reduce(function(r, o) { var item = hash[o.id]; if(!item) { item = hash[o.id] = { id: o.id, ac: [] }; r.push(item); } item.ac.push(o.ac); return r; }, []); console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.