【问题标题】:Loop through object, where some keys have same name duplicated循环遍历对象,其中一些键具有相同的名称重复
【发布时间】:2020-07-04 20:58:26
【问题描述】:

我正在编写一个代码库,令人讨厌的是,我正在遍历的对象有点混乱......

基本上,在我的对象中...我打算找到 pageviews 节点,但前提是它包含数据数组...

以下是数据示例:

  data = [
      {
        event: "click",
        dimension: 123,
        cart:  {
              pageviews:[]
          }
      },
     {
        event: "scroll",
        dimension: 456,
        cart:  {
              pageviews:[]
          }
      },
     {
        event: "onload",
        dimension: 789,
      },
     {
        event: "click",
        dimension: 'xyz',
        cart:  {
              pageviews:[
                    {data: 1},
                    {data: 2},
                    {data: 3},
              ]
          }
      }
  ];

如您所见,该对象包含 3 次“综合浏览量”的引用。

在下面的代码中,如果 pageviews 包含数据数组,我想隐藏一个 DOM 元素。

但是,我的 DOM 元素并没有隐藏。所以我认为它不够聪明。

只有当对象包含带有数据的页面浏览量时,才能访问“页面浏览量或运行命令的最佳方式是什么?

    let searchURL    = new URLSearchParams(location.search);

    if (searchURL.has("a" && "b" && "c")) 

        // Loop through data obj to find which object
        for (let index = 0; index < data.length; index++) {
            const dataNode = data[index];

            // Check if loop contains node contains "cart"
            if (dataNode.hasOwnProperty("cart")) {

                // Check if "pageview" node exists
                if (dataNode.cart.hasOwnProperty("pageview")) {

                    let resultsResponse = dataNode.cart.pageview;

                    if (resultsResponse.length >= 1) {

                        // THEN HIDE DOM ELEMENT
                        const bigBlockContainer = document.querySelector('.big-container');
                        bigBlockContainer.remove();
                    }
                }
            }
        }
    }

【问题讨论】:

  • 您能否添加一个包含示例 HTML 的可测试示例?
  • 您可以尝试将所有if 语句合并为一个。
  • @Mr Polywhirl - 我不认为我可以......这是一个企业应用程序......我实际上根本没有在 HTML 中工作。就像我只是删除一个 DOM 元素..
  • data 上运行过滤器以仅返回带有pageview.length &gt; 0 的人开始,然后您只处理相关数据,然后处理您需要做的事情
  • 那么,如果(在任何时候)数据中的任何项目具有购物车页面视图大小,请删除该元素?

标签: javascript arrays object for-loop dom


【解决方案1】:

您可以使用.filter() 函数,该函数将函数作为参数并生成一个新数组,其中仅包含满足您传递的条件的项目:

var interestingSubset = data.filter((item) => item.cart && item.cart.pageviews && item.cart.pageviews.length);

现在,如果您只想看看是否至少有一个项目符合您的条件,那么您可以这样做:

if (interestingSubset.length) {
    //Remove item from DOM or do whatever you need to do
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2012-09-12
    相关资源
    最近更新 更多