JavaScript Array.prototype.reduce--对可能不存在的属性进行解构

JavaScript Array.prototype.reduce--对可能不存在的属性进行解构,javascript,Javascript,考虑到以下数据结构,其中product_变体可以有其他product_变体作为子项,我正在寻找一种简洁的算法,该算法将所有作为子项的“product_变体”提取到一个“product_变体”,但我所拥有的只是SKU product_variations: [ { product_variation_id: "", variation_name: variation_name, variation

考虑到以下数据结构,其中product_变体可以有其他product_变体作为子项,我正在寻找一种简洁的算法,该算法将所有作为子项的“product_变体”提取到一个“product_变体”,但我所拥有的只是SKU

  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啊,我明白了啊,好吧,是的,这更有意义