Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何以动态方式重新构造阵列?_Javascript_Arrays_Json_Multidimensional Array_Format - Fatal编程技术网

Javascript 如何以动态方式重新构造阵列?

Javascript 如何以动态方式重新构造阵列?,javascript,arrays,json,multidimensional-array,format,Javascript,Arrays,Json,Multidimensional Array,Format,下面是我目前使用的数组格式 有多个这样的类别,这是一个例子 但我需要将其重新构造为以下格式,如何以动态方式执行此操作 [ { "category":"electric", "items":[ { "temId":"123", "itemName":"name 1"

下面是我目前使用的数组格式

有多个这样的类别,这是一个例子

但我需要将其重新构造为以下格式,如何以动态方式执行此操作

[
   {
      "category":"electric",
      "items":[
         {
            "temId":"123",
            "itemName":"name 1"
         },
         {
            "itemId":"234",
            "itemName":"name 2"
         },
         {
            "itemId":"345",
            "itemName":"name 3"
         }
      ],
      "salePersons":[
         {
            "salePersonName":"person name 1"
         },
         {
            "salePersonName":"person name 2"
         },
         {
            "salePersonName":"person name 3"
         }
      ]
   }
]
下面是我以前尝试过的代码,但并没有给出预期的输出


常量数组=[{
“itemId”:“123”,
“项目名称”:“名称1”,
“类别”:“电气”,
“salePersonName”:“人名1”
},
{
“itemId”:“234”,
“项目名称”:“名称2”,
“类别”:“电气”,
“销售人员姓名”:“人员姓名2”
}, {
“itemId”:“345”,
“项目名称”:“名称3”,
“类别”:“电气”,
“销售人员姓名”:“人员姓名3”
},
{
“项目ID”:“34111”,
“项目名称”:“名称4”,
“类别”:“新类别”,
“销售人员姓名”:“人员姓名5”
}
];
让结果={};
array.forEach(函数(o){
结果[o.category]=结果[o.category]| |{};
结果[o.category]['items']=[{
“itemId”:结果[o.itemId],
“itemName”:结果[o.itemName]
}];
结果[o.category]['salePersons']=[{
“salePersonName”:结果[o.salePersonName]
}];
});

log(“result”,result)
下面的代码应该适合您

let result = {};
arr.forEach(function(o) {
  result[o.category] = result[o.category] || {};
  result[o.category]['items'] = result[o.category]['items'] || [];
  result[o.category]['items'].push({
    "itemId": o.itemId,
    "itemName": o.itemName
  });
  result[o.category]['salePersons'] = result[o.category]['salePersons'] || [];
   result[o.category]['salePersons'].push({
    "salePersonName": o.salePersonName
  });
});

console.log("result", result);
const输入=[
{
“itemId”:“123”,
“项目名称”:“名称1”,
“类别”:“电气”,
“salePersonName”:“人名1”
},
{
“itemId”:“234”,
“项目名称”:“名称2”,
“类别”:“电气”,
“销售人员姓名”:“人员姓名2”
},{
“itemId”:“345”,
“项目名称”:“名称3”,
“类别”:“电气”,
“销售人员姓名”:“人员姓名3”
}
]
const temp=input.reduce((acc,{itemId,itemName,category,salePersonName})=>{
常量条目=(acc[类别]??={项目:[],销售人员:[]})
items.push({itemId,itemName});
entry.salePersons.push({salePersonName});
返回acc;
},{})
const result=Object.entries(temp.map)([category,data])=>({category,…data}))

控制台日志(结果)在稍旧的typescript版本中,null赋值不起作用,因此我对代码进行了轻微修改。给你。

const输入=[{
“itemId”:“123”,
“项目名称”:“名称1”,
“类别”:“电气”,
“salePersonName”:“人名1”
},
{
“itemId”:“234”,
“项目名称”:“名称2”,
“类别”:“电气”,
“销售人员姓名”:“人员姓名2”
}, {
“itemId”:“345”,
“项目名称”:“名称3”,
“类别”:“电气”,
“销售人员姓名”:“人员姓名3”
},
{
“itemId”:“456”,
“项目名称”:“名称5”,
“类别”:“玩具”,
“销售人员姓名”:“人员姓名3”
}
]
常数温度=输入减少((acc{
itemId,
项目名称,
类别
销售人员姓名
}) => {
让他们进来;
如果(acc[类别]!=null | | acc[类别]!=未定义){
条目=acc[类别]
}否则{
条目=附件[类别]={
项目:[],
销售人员:[]
}
}
entry.items.push({
itemId,
项目名称
});
entry.salePersons.push({
销售人员姓名
});
返回acc;
}, {})
const result=Object.entries(temp.map)([category,data])=>({
类别
…数据
}))

控制台日志(结果)
你可以分享你遇到问题的代码吗?抱歉@evolutionxbox,我无法提供代码库,因为这是一个私人项目,非常感谢,你方提供了任何重新排列数组格式的解决方案,我已经在上面提到了,抱歉造成混乱。我不是在问项目来源。只有显示您遇到问题的代码的。StackOverflow不是要求他人为您编写代码的地方。@evolutionxbox用代码更新了帖子这是什么类型的运算符,“??=”给出错误,我正在使用typescript。@RaheemMohamed是空赋值运算符,您的答案被接受。
let result = {};
arr.forEach(function(o) {
  result[o.category] = result[o.category] || {};
  result[o.category]['items'] = result[o.category]['items'] || [];
  result[o.category]['items'].push({
    "itemId": o.itemId,
    "itemName": o.itemName
  });
  result[o.category]['salePersons'] = result[o.category]['salePersons'] || [];
   result[o.category]['salePersons'].push({
    "salePersonName": o.salePersonName
  });
});

console.log("result", result);