JavaScript Array.prototype.reduce--对可能不存在的属性进行解构
考虑到以下数据结构,其中product_变体可以有其他product_变体作为子项,我正在寻找一种简洁的算法,该算法将所有作为子项的“product_变体”提取到一个“product_变体”,但我所拥有的只是SKUJavaScript Array.prototype.reduce--对可能不存在的属性进行解构,javascript,Javascript,考虑到以下数据结构,其中product_变体可以有其他product_变体作为子项,我正在寻找一种简洁的算法,该算法将所有作为子项的“product_变体”提取到一个“product_变体”,但我所拥有的只是SKU product_variations: [ { product_variation_id: "", variation_name: variation_name, variation
product_variations: [
{
product_variation_id: "",
variation_name: variation_name,
variation_item_name: "test",
sku: "SKU000",
price: price,
stock: stock,
topLevel: true,
child_variations: [{sku: "SKU001"}]
},
]
我认为reduce对此很有用,因为我可以迭代每个child_变体,然后使用find函数从product_变体数组中获取相关SKU,并将其推送到累加器。我正试图让这样的东西发挥作用:
const extractChildrenVariations = (variationItem, variations) => {
return variationItem.child_variations.reduce( (arr, {sku: s}) => arr.push(
variations.find( v => v.sku == s)
), [])
}
我认为这可能是问题所在;有时一开始就没有任何child_变体,即child_变体:[{}]
有人知道我可能做错了什么吗?我确信,如果SKU位于child_variations数组中,则使用该SKU进行variations.find将显示某些内容(因为它确实存在)使用
数组可以更易于读取。filter
:
const extractChildrenVariations=(variationItem,variations)=>{
返回variations.filter(v=>variationItem.child_variations.find(cv=>cv.sku==v.sku));
}
当没有子变量时,为什么数组中有空对象?数组应该是空的([]
而不是[{}]
)。如果在空数组上调用它,它会返回基本累加器吗?是的,那是正确的。啊,好的,很酷,谢谢,我必须更改API,但这让我很恼火。编辑:@Paulpro帮我解决了这个问题,如果你想发布答案的话。问题是,child_变体并不包含实际的变体,只是一个reference@DanielThompson啊,我明白了啊,好吧,是的,这更有意义