Javascript 基于属性创建产品变体

Javascript 基于属性创建产品变体,javascript,arrays,object,Javascript,Arrays,Object,我正在开发一个电子商务javascript应用程序,并尝试基于属性创建产品变体 如果产品具有以下属性: 尺寸:小型、中型、大型 颜色:红色、蓝色 材料:棉、毛 我想要这样的结果,{颜色:“红色”,大小:“小”},{颜色:“蓝色”,大小:“小”},{颜色:“红色”,大小:“中等”},{颜色:“蓝色”,大小:“中等”},{颜色:“红色”,大小:“大”},{颜色:“蓝色”,大小:“大”} 我已经这样做了,但是有没有简单的方法呢 以下是我完成的代码: let属性={ 颜色:[“红色”、“蓝色”], 尺寸

我正在开发一个电子商务javascript应用程序,并尝试基于属性创建产品变体

如果产品具有以下属性:

尺寸:小型、中型、大型

颜色:红色、蓝色

材料:棉、毛

我想要这样的结果,{颜色:“红色”,大小:“小”},{颜色:“蓝色”,大小:“小”},{颜色:“红色”,大小:“中等”},{颜色:“蓝色”,大小:“中等”},{颜色:“红色”,大小:“大”},{颜色:“蓝色”,大小:“大”}

我已经这样做了,但是有没有简单的方法呢

以下是我完成的代码:
let属性={
颜色:[“红色”、“蓝色”],
尺寸:[“小”、“中”、“大”],
材料:[“棉”、“毛”]
};
让getProducts=(数组)=>{
if(arrays.length==0){
返回[];
}
让结果=[];
getProducts(arrays.slice(1)).forEach((product)=>{
数组[0]。forEach((值)=>{
结果:push([value].concat(product));
});
});
返回结果;
};
让getAllCombinations=(属性)=>{
让attributeNames=Object.keys(属性);
//console.log(attributeName);
让attributeValues=attributeNames.map((name)=>attributes[name]);
//console.log(属性值);
返回getProducts(AttributeValue).map((产品)=>{
obj={};
attributeNames.forEach((名称,i)=>{
obj[名称]=产品[i];
});
返回obj;
});
};
让组合=getAllCombinations(属性);
控制台.日志(组合.长度);

控制台日志(组合)如果不需要直接支持ie,可以使用和array.prototype.map()的组合

let属性={
颜色:[“红色”、“蓝色”],
尺寸:[“小”、“中”、“大”],
};
常量组合=attributes.color.flatMap((d)=>
attributes.size.map((v)=>({color:d,size:v}))
);
console.log(组合)请尝试以下操作:

let属性={
颜色:[“红色”、“蓝色”],
尺寸:[“小”、“中”、“大”],
材料:[“棉”、“毛”],
性别:[“男性”、“女性”],
类型:[“休闲”、“运动”]
};
设attrs=[];
for(Object.entries(attributes))的常量[attr,values]
push(values.map(v=>({[attr]:v}));
attrs=attrs.reduce((a,b)=>a.flatMap(d=>b.map(e=>({…d,…e}));

控制台日志(attrs)不错,但是如果产品有两个以上的属性,如颜色、大小、材质,会发生什么?我修改了我的代码,请再次检查,你应该看看多个数组的笛卡尔积。我将把它添加到我的答案中。