此问题已在此处找到答案:
javascript中多个数组的笛卡尔乘积(35个答案)
6小时前关门了。
我有两个对象数组,我想创建一个对象数组,表示前两个数组的所有可能组合。为了说明问题,假设我有一系列的产品在供应,一系列的产品在需求,我希望看到所有可能的供需组合。我正在使用node.js,但问题是语言不可知。
因此,如果我有:
const supply = [
{
id: '1',
name: 'chair'
},
{
id: '2',
name: 'desk'
}
];
const demand = [
{
id: '3',
name: 'couch'
},
{
id: '4',
name: 'desks'
}
]
我希望输出为:
[
{
id: '1-3',
supply: 'chair',
demand: 'couch'
},
{
id: '1-4',
supply: 'chair',
demand: 'desks'
},
{
id: '2-3',
supply: 'desk',
demand: 'couch'
},
{
id: '2-4',
supply: 'desk',
demand: 'desks'
}
]
为此,我实施了以下措施:
return supply.reduce((acc, supply) => {
return acc.concat(
demand.map(demand => {
return {
id: `${supply.id}-${demand.id}`,
supply: supply.name,
demand: demand.name
}
})
)
}, []);
这很好,但是随着我的数据集变大(现在每个数组中有几百个项目,我很快就会有更多项目),它也会变得非常慢。
有没有办法优化这个?我想不出一种方法来实现这一点,而不是对第一个数组的每一项先遍历一个数组,然后遍历另一个数组。但也许我错过了什么?
如果我能提供更多信息,请告知。
任何帮助都将不胜感激!
1条答案
按热度按时间vddsk6oq1#
代码可以大大简化为以下内容,这应该非常快。