L oop через объект, где некоторые ключи имеют одинаковое имя - PullRequest
2 голосов
/ 24 марта 2020

Я работаю над базой кода, где досадный объект, через который я прохожу, немного грязный ....

По сути, в моем объекте ... Я намереваюсь найти просмотров страниц узла, но только если он содержит массив данных ...

Вот пример данных:

  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},
              ]
          }
      }
  ];

Как вы Как видите, объект содержит ссылки на "просмотры страниц" три раза.

В моем коде ниже я хочу скрыть элемент DOM, если pageviews содержит массив данных.

Однако мой элемент 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();
                    }
                }
            }
        }
    }

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете использовать функцию .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
}
...