将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(结果)

是一个字符串。请添加您的代码和错误,您得到了。顺便说一句,您需要一个奇怪的结构。您需要始终知道父项才能获得子项。感谢帮助,但每个父项中都有多个“子”键,但我需要一个“子”键作为数组