在对象中按名称查找嵌套属性的最佳方法

2023-12-02

我有一个对象(dataLayer),它可以增加和减少长度,具体取决于您访问的页面数量。

我想要:

  • 循环遍历目标并查找属性名称“ecommerce”。
  • 我特别想找到“brandcode”的值。
  • 必须与“pagetitle: `Login Page”位于同一对象组中

显然,我可以做到dataLayer['4'].ecommerce.information. product。然而,我遇到的问题是这个键/值位置可以是任意数字。 EG dataLayer[0],[1],[2],[12] 等

循环访问此对象并查找此键/值对的最佳方法是什么,无论它在对象中的索引如何?

const dataLayer = 
  { 0: { a: 123, event: 'pageload', productId: 1 } 
  , 1: { b: 456, event: 'pageload', productId: 3 } 
  , 2: {         event: 'gtm.load', productId: 3 } 
  , 3: {         event: 'gtm.load', productId: 4 } 
  , 4: 
    { pagetitle: 'Login Page'
    , ecommerce: 
      { information: 
        { product: 
          [ { brandCode: 'car', productColor: 'red' } 
          , { brandCode: 'car', productColor: 'green' } 
          , { brandCode: 'car', productColor: 'yello' } 
          ]   
  } } } };

Thanks,


专门从以下位置检索品牌代码数组"Login Page"

const dataLayer = {
  0: {event: 'pageload', productId: 1, a: 123},
  1: {event: 'pageload', productId: 3, b: 456},
  2: {event: 'gtm.load', productId: 3},
  3: {event: 'gtm.load', productId: 4},
  4: {
    pagetitle: 'Login Page',
    ecommerce: {
      information: {
        product: [
          {brandCode: 'car', productColor: 'red'},
          {brandCode: 'truck', productColor: 'green'},
          {brandCode: 'bike', productColor: 'yello'},
        ]
      }
    }
  },
  17: {
    pagetitle: 'Login Page',
    ecommerce: {
      information: {
        product: [
          {brandCode: 'cow', productColor: 'lila'},
        ]
      }
    }
  }
};


function getEcommerceBrandCodes(pagetitle, data) {
  return Object.entries(data).reduce((a, [k, ob]) => {
    const isPagetitle = ob.hasOwnProperty("pagetitle") && ob.pagetitle === pagetitle;
    const isEcommerce = ob.hasOwnProperty("ecommerce");
    if (isPagetitle && isEcommerce) {
      a.push(ob.ecommerce.information?.product?.map(item => item.brandCode));
    }
    return a;
  }, []).flat();
}

console.log(getEcommerceBrandCodes("Login Page", dataLayer));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在对象中按名称查找嵌套属性的最佳方法 的相关文章

随机推荐

  • 在记事本++中突出显示正则表达式捕获组?

    截至目前 如果我在记事本 中执行正则表达式 查找和替换 它会像普通文本 查找 一样突出显示整个搜索参数 是否可以用不同的颜色突出显示捕获组 以便我可以轻松识别我在正则表达式中捕获的内容 例如 如果我想匹配 打印 foo 但捕获 foo 作为
  • 如何在 Ember 中为自定义构建环境指定压缩

    如何为自定义环境指定压缩 捆绑以及向文件名添加失效哈希值 生产环境将自动压缩和合并文件 并向文件名添加失效哈希值 IE 每当我使用ember build environment production来触发if environment pro
  • 在运行时修改程序集?

    我如何修改给定程序集中的内存加载方法 以便 clr 在实例化某些类的新对象时 它会使用修改后的代码创建新对象 您可以使用莫诺 塞西尔在加载之前修改程序集 您可以将修改后的程序集保存到字节数组中 然后调用Assembly Load加载字节数组
  • 在浏览器中显示 Excel 文件。 PHPExcel

    例如我正在使用这样的代码
  • 从另一个类访问变量 - Objective-C

    这个问题可能之前已经被问过 所以我很抱歉 我正在开发一个 iPhone 应用程序 假设我在 class1 中有一个变量 var 我想在 class2 中添加一个 UIButton 当点击它时 会将 var 重置为 0 当应用程序关闭时 会保
  • Apache Camel 中的集群:多个 JVM 相同的 CamelContext

    我有一个部署在集群上的应用程序 根据环境 集群可能有 2 或 4 个 JVM 该应用程序具有我们在所有 JVM 上部署的相同 CamelContext 因此 所有 JVM 都有相同的路由 对于 FTP 路由 这很好 因为它具有竞争力 并且只
  • C# 中的别名关键字(如 typedef)?

    我有 2 个库 在不同平台上有不同的大小写 似乎其他所有内容都是相同的 方法名称 参数顺序等 我如何创建一个别名 以便我当前的平台 a 拼写在编译时起作用对于平台 b 我真的不想为大小写差异制作一个包装器 您可以使用 using 关键字创建
  • C# 到 VB6 COM 事件(“对象或类不支持事件集”)

    真的是用这个把我的头发拉出来了 我有一个 C 项目 其接口定义为 Externally Accessible API InterfaceType ComInterfaceType InterfaceIsIDispatch public in
  • 如何在 WiX 中安装时填充组合框?

    编辑 我已经更新了下面的代码 现在它可以工作了 感谢罗布的回答 我找到了几页展示如何执行此操作 http www cmcrossroads com content view 13160 120 http www mail archive c
  • 带有国家点击和缩放功能的 d3 世界地图几乎无法正常工作

    我正在制作一张具有点击缩放功能的世界地图 当点击一个国家时 地图会放大 但该国家并不总是居中 当你点击并重复时 也会发生同样的情况 它似乎永远不会提供相同的结果 注意 如果禁用过渡功能 缩放和居中确实有效 只有在添加旋转时才会显示不正确 我
  • 隐藏用户表单后如何返回或重新显示它?

    我在 UserForm2 的一个命令按钮中包含以下代码 Private Sub CButton1 Click UserForm1 Show Me Hide End Sub Now Userform1显示 然后我在 Userform1 的一个
  • 如何打印使用 Apache Poi 和 java 制作的工作簿文件?

    我在 eclipse 中创建一页工作簿文件 需要打开打印对话框并打印这些文件 我了解如何打开打印对话框和所有内容 我只是找不到如何告诉系统它是我想要打印的工作簿文件 wb 因此 除非它知道我想用它打印什么 否则打开对话框是行不通的 有人至少
  • 未在此范围内声明的变量

    我正在为类制作一个程序 由于某种原因 当在类定义中声明它时 它给了我这个错误 错误 在函数中 void setMessageBuffer std string 错误 message 在这方面没有申明 class apple private
  • 是否可以在不使用 win32 API 库的情况下在 C# 中获取 LAN 中连接的 IP 地址列表?

    我正在尝试获取在 LAN 中连接的 IP 地址列表 是否可以在不使用 win32 API 库 Netapi32 dll 的情况下获得 有什么想法可以在不使用非托管 win32 动态库的情况下获得 Windows 7 操作系统的目标 您可以使
  • UIButton 与 UITableViewCellSelectionStyleGray 选择颜色

    我试图将 UIButton 的选定颜色设置为 UITableViewCellSelectionStyleGray 的颜色 问题是 UIButton 的选择颜色无法设置 只能设置图像 有谁知道如何使用 UITableViewCellSelec
  • 如何在 C# Windows 应用程序中的表单之间传递值?

    我有两个表单 A 和 B 表单 A 是应用程序的默认启动表单 我在 Form A 中做了一些事情 然后我想并行运行 Form B 然后通过 从表单 A 到表单 B 中的方法的参数 How Ian 给出了一些示例代码 但我想提出更广泛的观点
  • 使用 Excel 2016 将范围保存为图片

    该代码的目的是将一系列单元格保存为桌面上的图片 该文件已创建 但不包含任何单元格数据 它是具有范围相对大小的空白图像 该问题出现在 Office 2016 中 在 2013 中有效 Sub SendSnapshot2 Dim strRng
  • 将 CAGradient 遮罩层应用到 UITextView

    我有一个 UITextView 带有可滚动文本 我试图对其应用渐变层 因此可见文本的底部总是稍微淡出 这是我的代码 CAGradientLayer maskLayer CAGradientLayer layer maskLayer colo
  • 获取 EditText 中按下的键

    I want to know which key has been pressed in an EditText For example if a is pressed I want to get the value as a How ca
  • 在对象中按名称查找嵌套属性的最佳方法

    我有一个对象 dataLayer 它可以增加和减少长度 具体取决于您访问的页面数量 我想要 循环遍历目标并查找属性名称 ecommerce 我特别想找到 brandcode 的值 必须与 pagetitle Login Page 位于同一对