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

标签 javascript

鉴于以下数据结构,其中 product_variations 可以有其他 product_variations 作为 child ,我正在寻找一种简洁的算法,它将提取所有作为 child 的“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,然后使用查找函数从 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 的 variations.find 将会出现一些问题(因为它确实存在)

最佳答案

使用array.filter可以提高可读性:

const extractChildrenVariations = (variationItem, variations) => {
    return variations.filter(v => variationItem.child_variations.find(cv => cv.sku === v.sku));
}

关于JavaScript Array.prototype.reduce——解构可能不存在的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624065/

相关文章:

javascript - double ** 在导入中做什么?

javascript - 光标如何在 jQuery 文本编辑器中闪烁?

javascript - 执行一些代码,然后进入交互 Node

javascript - 如何获取父元素的左侧位置

javascript - 使用javascript将一个div分成2个

javascript - 如何在Javascript中将数字作为字符串创建关联数组

javascript - AngularJS 错误 : fnPtr is not a function

javascript - 如何为每个帖子添加一个 eventListener(不使用 jQuery)?

javascript - 如何或在何处将 javascript settimeout 函数添加到 CSS 垂直下拉菜单

JavaScript:如何计算字符串中重复的字母并输出后面的数字?