Отключить массив, если имеет значение в javascript - PullRequest
2 голосов
/ 07 марта 2020

Я пытаюсь разработать простой поворот баннера с помощью javascript.

Как я могу убедиться, что в перемешивание включены только массивы со значением "active": 1?

<div id="ad-container"></div>
<script>
var banner = [{
        "img": "https://DOMAIN.TLD/IMG.JPG",
        "url": "https://LINK.DOMAIN.TLD",
        "maxWidth": 468,
        "active": 1
      },
      {
        "img": "https://DOMAIN.TLD/IMG2.JPG",
        "url": "https://LINK2.DOMAIN.TLD",
        "maxWidth": 468,
        "active": 0
      }
,
      {
        "img": "https://DOMAIN.TLD/IMG3.JPG",
        "url": "https://LINK3.DOMAIN.TLD",
        "maxWidth": 468,
        "active": 1
      }
    ];

function shuffle(banners) {
      var j, x, i;
      for (i = banners.length - 1; i > 0; i--) {

        j = Math.floor(Math.random() * (i + 1));
        x = banners[i];
        banners[i] = banners[j];
        banners[j] = x;
      }
      return banners;
    }

    shuffle(banner);

document.getElementById('ad-container').innerHTML = '<a href="' + banner[0]["url"] + '"><img src="' + banner[0]["img"] + '" style="width: 100%;height: auto;max-width: ' + banner[0]["maxWidth"] + 'px;"></a>';

</script>

Все массивы со значением «active»: 0 не должны включаться в случайное перемешивание.

Может быть, кто-то знает, как улучшить перемешивание / код или как предотвратить отображение тех же баннеров более чем один раз на странице, если на той же странице есть больше document.getElementById.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 07 марта 2020

Просто отфильтруйте массив.

var banner = [{
        "img": "https://DOMAIN.TLD/IMG.JPG",
        "url": "https://LINK.DOMAIN.TLD",
        "maxWidth": 468,
        "active": 1
      },
      {
        "img": "https://DOMAIN.TLD/IMG2.JPG",
        "url": "https://LINK2.DOMAIN.TLD",
        "maxWidth": 468,
        "active": 0
      }
,
      {
        "img": "https://DOMAIN.TLD/IMG3.JPG",
        "url": "https://LINK3.DOMAIN.TLD",
        "maxWidth": 468,
        "active": 1
      }
    ];
    
    let activeParts = banner.filter( info => info.active );
    
    console.log( activeParts ); 

    // do whatever, e.g.:
    // shuffle( activeParts );
0 голосов
/ 07 марта 2020
banner = banner.map( value => {
   if( value.active === 1 ){
      return value
   }
});

Это уменьшит ваш массив, чтобы включить в него только активные объекты.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

...