将JavaScript数组转换为JSON对象
我正在尝试为将JavaScript数组转换为JSON对象,javascript,arrays,json,for-loop,grouping,Javascript,Arrays,Json,For Loop,Grouping,我正在尝试为或JQuery编写。每个循环,以便它将从所需格式的数组生成一个新的JSON对象。我想从一个输入JavaScript数组中输出一个JSON对象。我需要转换以下输入数组: 输入: [ { "parent": "parent_1", "child": "abc", "data": "data1"
或JQuery
编写。每个循环,以便它将从所需格式的数组生成一个新的JSON对象。我想从一个输入JavaScript
数组中输出一个JSON
对象。我需要转换以下输入数组:
输入:
[
{
"parent": "parent_1",
"child": "abc",
"data": "data1"
},
{
"parent": "parent_1",
"child": "def",
"data": "data2"
},
{
"parent": "parent_1",
"child": "ghi",
"data": "data3"
},
{
"parent": "parent_2",
"child": "jkl",
"data": "data4"
},
{
"parent": "parent_2",
"child": "acc",
"data": "data5"
},
{
"parent": "parent_3",
"child": "mjh",
"data": "data6"
},
{
"parent": "parent_3",
"child": "fg1",
"data": "data7"
},
{
"parent": "parent_2",
"child": "dfg",
"data": "data8"
},
{
"parent": "parent_3",
"child": "jkk",
"data": "data9"
},
{
"parent": "parent_4",
"child": "3ff",
"data": "data10"
},
{
"parent": "parent_3",
"child": "mhg",
"data": "data11"
},
{
"parent": "parent_1",
"child": "gnh",
"data": "data12"
}
]
[
{
"parent_1": {
"child": [
{
"name": "abc",
"data": "data1"
},
{
"name": "def",
"data": "data2"
},
{
"name": "gh1",
"data": "data3"
},
{
"name": "gnh",
"data": "data12"
}
]
}
},
{
"parent_2": {
"child": [
{
"name": "jkl",
"data": "data4"
},
{
"name": "acc",
"data": "data5"
},
{
"name": "dfg",
"data": "data8"
}
]
}
},
{
"parent_3": {
"child": [
{
"name": "mjh",
"data": "data6"
},
{
"name": "fg1",
"data": "data7"
},
{
"name": "jkk",
"data": "data9"
},
{
"name": "mhg",
"data": "data11"
}
]
}
},
{
"parent_4": {
"child": [
{
"name": "3ff",
"data": "data10"
}
]
}
}
]
因此,从上面的数组中,您希望为
或
JQuery运行一个。每个循环将生成一个新的JSON
对象,格式如下:
输出:
[
{
"parent": "parent_1",
"child": "abc",
"data": "data1"
},
{
"parent": "parent_1",
"child": "def",
"data": "data2"
},
{
"parent": "parent_1",
"child": "ghi",
"data": "data3"
},
{
"parent": "parent_2",
"child": "jkl",
"data": "data4"
},
{
"parent": "parent_2",
"child": "acc",
"data": "data5"
},
{
"parent": "parent_3",
"child": "mjh",
"data": "data6"
},
{
"parent": "parent_3",
"child": "fg1",
"data": "data7"
},
{
"parent": "parent_2",
"child": "dfg",
"data": "data8"
},
{
"parent": "parent_3",
"child": "jkk",
"data": "data9"
},
{
"parent": "parent_4",
"child": "3ff",
"data": "data10"
},
{
"parent": "parent_3",
"child": "mhg",
"data": "data11"
},
{
"parent": "parent_1",
"child": "gnh",
"data": "data12"
}
]
[
{
"parent_1": {
"child": [
{
"name": "abc",
"data": "data1"
},
{
"name": "def",
"data": "data2"
},
{
"name": "gh1",
"data": "data3"
},
{
"name": "gnh",
"data": "data12"
}
]
}
},
{
"parent_2": {
"child": [
{
"name": "jkl",
"data": "data4"
},
{
"name": "acc",
"data": "data5"
},
{
"name": "dfg",
"data": "data8"
}
]
}
},
{
"parent_3": {
"child": [
{
"name": "mjh",
"data": "data6"
},
{
"name": "fg1",
"data": "data7"
},
{
"name": "jkk",
"data": "data9"
},
{
"name": "mhg",
"data": "data11"
}
]
}
},
{
"parent_4": {
"child": [
{
"name": "3ff",
"data": "data10"
}
]
}
}
]
您可以使用.reduce函数,例如:
var array = [ {name: 'item 1', cate: 'cate-1'}, {name: 'item 2', cate: 'cate-2'} ]
var object = array.reduce(function(obj, item) {
if (!obj[item.cate]) obj[item.cate] = {child: []};
obj[item.cate].child.push(item);
return obj;
}, {})
console.log(object);
我想你想要这样的东西
const convertArray = (arr, field) => {
const obj = {};
arr.forEach(elem => {
const param = elem[field];
if (!Array.isArray(obj[param])) obj[param] = [];
delete elem[field];
obj[param].push(elem);
});
return Object.keys(obj).map(elem => {
return { [elem]: { child: obj[elem] } };
});
}
那你就用
convertArray(*array*, "parent")
您可以使用parent
作为对象的键对数据进行分组,并将对象的其余部分添加到组的子数组中
这种方法不计算给定的数据
const
数据=[{家长:“家长1”,孩子:“abc”,数据:“data1”},{家长:“家长1”,孩子:“def”,数据:“data2”},{家长:“家长1”,孩子:“ghi”,数据:“data3”},{家长:“家长2”,孩子:“jkl”,数据:“data4”},{家长:“家长2”,孩子:“acc”,数据:“data5”},{家长:“家长3”,孩子:“mjh”,数据:“data6”},{家长:“家长3”,child:“fg1”,data:“data7”},{parent:“parent_2”,child:“dfg”,data:“data8”},{parent:“parent_3”,child:“jkk”,data:“data9”},{parent:“parent_4”,child:“data10”},{parent:“parent_3”,child:“mhg”,data:“data11”},{parent:“parent:“parent_1”,child:“gnh”,data:“data12”},
结果=Object.values(data.reduce((r,{parent,…o})=>{
r[parent]??={[parent]:{children:[]};
r[parent][parent].children.push(o);
返回r;
}, []));
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
您可以使用下面的代码进行此操作
var arr=[{“parent”:“parent_1”,“child”:“abc”,“data”:“data1”},{“parent”:“parent_1”,“child”:“def”,“data”:“data2”},{“parent”:“parent_1”,“child”:“ghi”,“data”:“data3”},{“parent”:“parent_2”,“child”:“jkl”,“data”:“data4”},{“parent”:“parent”:“parent”;“parent”;“data5”},{“parent”:“parent”:“parent”:“parent”:“parent”:“parent”:“parent”:“parent”;“data3”,“child”:“mjh”,“data6”;“parent”{,“child”:“fg1”,“data”:“data7”},{“parent”:“parent_2”,“child”:“dfg”,“data”:“data8”},{“parent”:“parent_3”,“child”:“jkk”,“data”:“data9”},{“parent”:“parent_4”,“child”:“3ff”,“data”:“data10”},{“parent”:“parent_3”,“child”:“mhg”,“data”:“data11”},{“parent”:“parent”:“parent_1”,“child”:“gnh”,“data”:“data12”});
var result={};
$。每个(arr,功能(i,项目){
如果(!result[item.parent]){
结果[项目父项]=[];
}
变量数据={'child':{'name':item.child,'data':item.data};
(结果[项目父项])。推送(数据);
});
console.log(结果)
是一个字符串。请添加您的代码和错误,您得到了。顺便说一句,您需要一个奇怪的结构。您需要始终知道父项才能获得子项。感谢帮助,但每个父项中都有多个“子”键,但我需要一个“子”键作为数组