Array getting empty array item

I am trying to build something like card memory game and I am populating cards with font awesome icons. But I already encountered a problem as I often get empty pair instead of pair of icons. This is one example of my array shown in the console: Array(16) 0: ['github'] 1: [] 2: ['opera'] 3: ['opera'] 4: [] 5: ['reddit'] 6: ['xbox'] 7: ['github'] 8: ['java'] 9: ['reddit'] 10: ['xbox'] 11: ['docker'] 12: ['java'] 13: ['redhat'] 14: ['docker'] 15: ['redhat']

And this is my JS code:

let brands = [
  "angular",
  "amazon",
  "apple",
  "css3",
  "docker",
  "edge",
  "dropbox",
  "elementor",
  "ethereum",
  "figma",
  "github",
  "gitlab",
  "gulp",
  "hackerrank",
  "html5",
  "java",
  "js",
  "kaggle",
  "laravel",
  "linkedin",
  "linux",
  "mailchimp",
  "medium",
  "microsoft",
  "opencart",
  "opera",
  "paypal",
  "pinterest",
  "python",
  "quora",
  "react",
  "reddit",
  "redhat",
  "rust",
  "safari",
  "skype",
  "slack",
  "snapchat",
  "spotify",
  "swift",
  "tiktok",
  "telegram",
  "twitter",
  "unity",
  "unsplash",
  "vuejs",
  "wordpress",
  "xbox",
  "xing",
  "yarn",
];
let brandsCopy = brands.slice();
const easyBtn = document.querySelector(".easy");
const mediumBtn = document.querySelector(".medium");
const hardBtn = document.querySelector(".hard");
const expertBtn = document.querySelector(".expert");
const container = document.querySelector(".container");
let selectedBrands = [];

function createTable(n) {
  container.innerHTML = "";
  selectedBrands = [];
  randomLogos(n);
  let icon;
  for (let i = 0; i < n * n; i++) {
    let img1 = document.createElement("div");
    img1.classList.add("cool");
    for (let j = 0; j < n; j++) {
      icon = document.createElement("i");
      icon.classList.add("fab");
      icon.classList.add("fa-" + selectedBrands[i]);
    }
    img1.appendChild(icon);
    container.appendChild(img1);
  }
  return;
}

function randomLogos(n) {
  for (let i = 0; i < (n * n) / 2; i++) {
    let randomBrand = brandsCopy.splice(
      Math.floor(Math.random() * brands.length),
      1
    );
    selectedBrands.push(randomBrand);
    selectedBrands.push(randomBrand);
  }
  selectedBrands = selectedBrands.sort(() => Math.random() - 0.5);
  console.log(selectedBrands);
  brandsCopy = brands.slice();
  return selectedBrands;
}

console.log(brands);

codepen: https://codepen.io/argentinaivan/pen/YzEVeGp

What am I doing wrong here?

It is possible for this to generate a number that is not an index for brandsCopy (because you splice it), resulting in pushing undefined.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.