-1

I am trying to get the data and display from nested array through javascript

i have created an array like this

 var products = {Elecrtonics:["Mobile","Tablet","Laptop"],
    fasion:["celio","UCB","PE"],sports:["Puma","Rebock","Nike"]
};

i have three buttons named Electronics, Fasion, Sports when i click on Electronics button it should fetch and display electronics array ["Mobile","Tablet","Laptop"] same for Fasion and Sports

What should my approach for this? Or am i going wrong some where?

My Entire of HTML and JS looks like this

<div class = "container" id="formcontainer">
            <form>
                <div class="form-group col-lg-4 col-md-offset-3">
                    <h1>Welcome</h1>
                    <input type="text" class="form-control search" id="search" placeholder="What is in your mind?">

                </div>
                <div class="form-group col-lg-4 col-md-offset-3">
                    <button class="btn btn-primary" onClick="getData(Electronics)">Elecrtonics</button>
                    <button class="btn btn-primary" onClick="getData(Fasion)">Fasion</button>
                    <button class="btn btn-primary" onClick="getData(Sports)">Sports</button>
                </div>
                <p id = "myProducts"></p>
            </form>
        </div>
        <script>
        var products = {Elecrtonics:["Mobile","Tablet","Laptop"],fasion:["celio","UCB","PE"],sports:["Puma","Rebock","Nike"]};
            function getData (el){          
                document.getElementById("myProducts").innerHTML = products.el;
                    event.preventDefault()  
            }
</script>
Hemanth Paluri
  • 363
  • 3
  • 5
  • 12

2 Answers2

1

You need to use Bracket Notation to access properties via a variable.

 document.getElementById("myProducts").innerHTML = products[el];

Also pass arguments in quotes to be treated as string else they will be treated as identifiers(variables)

<button class="btn btn-primary" onClick="getData('Electronics')">Electronics</button>

For approach:

  1. I would recommend you to use addEventListener() to bind event handler instead of using inline event handlers.
  2. You can use data-*prefixed attributes to store arbitrary data

 var products = {
   Elecrtonics: ["Mobile", "Tablet", "Laptop"],
   Fasion: ["celio", "UCB", "PE"],
   Sports: ["Puma", "Rebock", "Nike"]
 };

 var elements = document.querySelectorAll('.btn-primary');
 for (var i = 0; i < elements.length; i++) {
   elements[i].addEventListener('click', function(event) {
     document.getElementById("myProducts").innerHTML = products[this.dataset.type];
     event.preventDefault()
   });
 }
<div class="container" id="formcontainer">
  <form>
    <div class="form-group col-lg-4 col-md-offset-3">
      <h1>Welcome</h1>
      <input type="text" class="form-control search" id="search" placeholder="What is in your mind?">

    </div>
    <div class="form-group col-lg-4 col-md-offset-3">
      <button class="btn btn-primary" data-type="Elecrtonics">Elecrtonics</button>
      <button class="btn btn-primary" data-type="Fasion">Fasion</button>
      <button class="btn btn-primary" data-type="Sports">Sports</button>
    </div>
    <p id="myProducts"></p>
  </form>
</div>
Satpal
  • 132,252
  • 13
  • 159
  • 168
  • why first you marked question as duplicate and after that removed from duplicate? – CommonPlane Dec 27 '16 at 07:19
  • @SavaliyaRahul, Due OP comment _i would like to know whether my approach is correct or not because i am not able to get desired output. i need some suggestions_ had to reopen it so that other can provide answer on __approach__ which was not covered by that question. Hope my point is clear – Satpal Dec 27 '16 at 07:20
1
<div class = "container" id="formcontainer">
            <form>
                <div class="form-group col-lg-4 col-md-offset-3">
                    <h1>Welcome</h1>
                    <input type="text" class="form-control search" id="search" placeholder="What is in your mind?">

                </div>
                <div class="form-group col-lg-4 col-md-offset-3">
                    <button class="btn btn-primary" onClick="getProducts('Elecrtonics')">Elecrtonics</button>
                    <button class="btn btn-primary" onClick="getProducts('fasion')">Fasion</button>
                    <button class="btn btn-primary" onClick="getProducts('sports')">Sports</button>
                </div>
                <p id = "myProducts"></p>
            </form>
        </div>


    <script>
           var products = {Elecrtonics:["Mobile","Tablet","Laptop"],fasion:["celio","UCB","PE"],sports:["Puma","Rebock","Nike"]};
                function getProducts (el){  

                    document.getElementById("myProducts").innerHTML = products[el];
                        event.preventDefault()  
                }
    </script>

Check https://jsfiddle.net/4o3s2j3L/

CommonPlane
  • 145
  • 14