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

时间:2018-04-03 07:00:19

标签: javascript

鉴于以下数据结构,其中product_variations可以将其他product_variations作为子项,我正在寻找一种简洁的算法,将所有'product_variations'作为子项提取到一个'product_variation',但我所拥有的只是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_variations,然后使用find函数从product_variations数组中获取相关的SKU并将其推送到累加器。我试图让这样的东西起作用:

const extractChildrenVariations = (variationItem, variations) => {
    return variationItem.child_variations.reduce( (arr, {sku: s}) => arr.push(
        variations.find( v => v.sku == s)
    ), []) 
}

我认为这可能是问题;有时开始时没有任何child_variations,即。 child_variations: [{}]

任何人都会看到我可能做错了什么?我相信,如果SKU在child_variations数组中,那些与该SKU一起查找的变种会变成一些东西(因为它肯定存在)

1 个答案:

答案 0 :(得分:1)

使用array.filter

可以更具可读性
const extractChildrenVariations = (variationItem, variations) => {
    return variations.filter(v => variationItem.child_variations.find(cv => cv.sku === v.sku));
}