【问题标题】:Count the number of in-stock product variants from the dataLayer从 dataLayer 计算库存产品变体的数量
【发布时间】:2022-01-12 21:48:28
【问题描述】:

我在 ecomm 网站的 Google 跟踪代码管理器中工作。

在产品页面上,我需要知道库存产品的数量。

dataLayer 具有嵌套在每个颜色选项下的大小。每个尺码都有一个值,显示该尺码是否有货(“available”:“false”或“true”)。

我提供的代码是 dataLayer 中显示的代码。在此示例中,4 种尺寸中有 3 种有库存,因此我寻找要运行的 JS 来计算 ""available": "true" 的数量 - 在这种情况下,答案是 3。

我希望有一个可以在 Google 跟踪代码管理器中的变量中使用的解决方案。

{
"product": {
    "variants": [
        {
            "colorID": "03",
            "colorName": "MEDIUM DENIM",
            "sizes": [
                {
                    "sizeID": "10",
                    "sizeName": "33",
                    "available": "false",
                    "price": "24.0"
                },
                {
                    "sizeID": "1",
                    "sizeName": "24",
                    "available": "true",
                    "price": "24.0"
                }
            ]
        },
        {
            "colorID": "06",
            "colorName": "LIGHT DENIM",
            "sizes": [
                {
                    "sizeID": "1",
                    "sizeName": "24",
                    "available": "true",
                    "price": "24.0"
                },
                {
                    "sizeID": "2",
                    "sizeName": "25",
                    "available": "true",
                    "price": "24.0"
                }
            ]
        }
    ]
}

}

【问题讨论】:

  • 你想返回什么,基本上用for循环遍历obj,然后当你到达数组时,你可以forEach或map到sizes数组,设置一个条件来检查available === 'true' 的值。然后根据您要返回的内容,设置一个空数组或对象并在 for let in obj 中定义它

标签: javascript arrays google-tag-manager


【解决方案1】:

如果我正确理解预期的结果

const data = {"product": {"variants": [
  {"colorID": "03","colorName": "MEDIUM DENIM","sizes": [
    {"sizeID": "10","sizeName": "33","available": "false","price": "24.0"},
    {"sizeID": "1","sizeName": "24","available": "true","price": "24.0"}]},
  {"colorID": "06","colorName": "LIGHT DENIM","sizes": [
    {"sizeID": "1","sizeName": "24","available": "true","price": "24.0"},
    {"sizeID": "2","sizeName": "25","available": "true","price": "24.0"}]}]}};
    

const result = {
  product: {
    variants: data.product.variants.map((variant) => (
      { 
        ...variant,  
        sizes: variant.sizes.filter(({ available }) => available === "true"),
      }
    ))
  }
}



console.dir(result, {depth: null})
.as-console-wrapper{min-height: 100%!important; top: 0}

----更新---

const data = {"product": {"variants": [
  {"colorID": "03","colorName": "MEDIUM DENIM","sizes": [
    {"sizeID": "10","sizeName": "33","available": "false","price": "24.0"},
    {"sizeID": "1","sizeName": "24","available": "true","price": "24.0"}]},
  {"colorID": "06","colorName": "LIGHT DENIM","sizes": [
    {"sizeID": "1","sizeName": "24","available": "true","price": "24.0"},
    {"sizeID": "2","sizeName": "25","available": "true","price": "24.0"}]}]}};
    
const result = data.product.variants
  .flatMap((variant) => variant.sizes
    .filter(({ available }) => available === "true")
  ).length;

console.dir(result, {depth: null})
.as-console-wrapper{min-height: 100%!important; top: 0}

【讨论】:

  • 非常感谢 Alexandr 的回复 - 我意识到我的原始问题令人困惑,因此我编辑了原始问题以使其更加清晰。我正在寻找库存产品的数量(即:3)
  • @Steve 感谢您澄清预期结果。检查更新的部分。
猜你喜欢
  • 2018-07-20
  • 2012-12-22
  • 2011-11-27
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多