<template>
....
</template>
<script>
export default {
data() {
return {}
},
created() {
const attributes = [
{
name: '颜色',
values: ['红色', '蓝色', '黑色']
},
{
name: '尺寸',
values: ['S', 'M', 'L']
},
{
name: '大小',
values: ['16G', '32G', '64G', '128G']
}
]
const skus = []
const attributeValues = attributes.map(attribute => attribute.values)
console.log("attributeValues", attributeValues)
console.log("skus", skus)
// 生成所有SKU组合
const combinations = this.getCombinations(attributeValues)
console.log("combinations", combinations)
const skuList = combinations.map(combination => {
const sku = skus.find(sku => this.isEqual(sku.attributes, combination))
return {
attributes: combination,
price: sku ? sku.price : 0,
stock: sku ? sku.stock : 0
}
})
console.log("skuList", skuList)
},
methods:{
isEqual(obj1, obj2) {
const keys1 = Object.keys(obj1)
const keys2 = Object.keys(obj2)
if (keys1.length !== keys2.length) {
return false
}
for (let key of keys1) {
if (obj1[key] !== obj2[key]) {
return false
}
}
return true
},
getCombinations(arrays) {
const result = [[]]
for (let i = 0; i < arrays.length; i++) {
const temp = []
for (let j = 0; j < result.length; j++) {
for (let k = 0; k < arrays[i].length; k++) {
temp.push([...result[j], arrays[i][k]])
}
}
result.splice(0, result.length, ...temp)
}
return result
}
}
}
</script>