Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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_Loops_Duplicates - Fatal编程技术网

循环中的Javascript条件

循环中的Javascript条件,javascript,arrays,loops,duplicates,Javascript,Arrays,Loops,Duplicates,这是我的意见: companyList: [ { company_name: 'company1', item: 'item1' }, { company_name: 'company1', item: 'item2' }, { company_name: 'company1', item: 'item3' },

这是我的意见:

    companyList: [
      {
        company_name: 'company1',
        item: 'item1'
      },
      {
        company_name: 'company1',
        item: 'item2'
      },
      {
        company_name: 'company1',
        item: 'item3'
      },
      {
        company_name: 'company2',
        item: 'item4'
      }
    ]
这就是我想要成为输出的方式:

    result: [
      {
        company_name: 'company1',
        product: [
          { item: 'item1'},
          { item: 'item2'},
          { item: 'item3'}
        ]
      },
      {
        company_name: 'company2',
        product: [
          { item: 'item4'}
        ]
      }
    ]

使用
map
,我如何获得结果?

您可以在
公司列表的数组上循环,并使用
O(n)
复杂性获得所需的输出,如下所示:

var公司列表=[{
公司名称:“公司1”,
项目:“项目1”
}, {
公司名称:“公司1”,
项目:“项目2”
}, {
公司名称:“公司1”,
项目:“项目3”
}, {
公司名称:“公司2”,
项目:“项目4”
}];
var tempObj={};
公司列表forEach((companyObj)=>{
if(临时公司[公司名称]){
tempObj[companyObj.company_name].product.push({item:companyObj.item});
}否则{
tempObj[公司名称]={
公司名称:companyObj.公司名称,
产品:[{item:companyObj.item}]
}
}
});
var结果=对象值(tempObj);

控制台日志(结果)
您可以使用
reduce
创建新数组
让公司列表=[{
公司名称:“公司1”,
项目:“项目1”
},
{
公司名称:“公司1”,
项目:“项目2”
},
{
公司名称:“公司1”,
项目:“项目3”
},
{
公司名称:“公司2”,
项目:“项目4”
}
]
让结果=公司列表减少(函数(acc,curr){
//使用findIndex获取comany_名称匹配的对象的索引
设findIndex=acc.findIndex(功能(项目){
退货项目.公司名称===当前公司名称;
});
//如果公司名称不存在,则将获取-1
如果(findIndex==-1){
设obj={};
//然后创建新对象并将值推送到它
对象公司名称=当前公司名称;
对象产品=[{
项目:当前项目
}];
附件推送(obj)
}否则{
//如果存在公司名称,则更新产品列表
acc[findIndex].product.push({
项目:当前项目
})
}
返回acc;
}, []);

console.log(result)
发布的问题似乎根本不包括解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试过的内容,以便说明您在某个问题中遇到的具体问题。有关更多信息,请参阅并获取。这可能有助于您完成以下部分: