0

I have an object called main and its one of the item, data: , points to an array defined as submenuitem. When user clicks on something, the UI gets updated with array items in submenuitems. It also updates the topbar to display the title of current menu which is basically the variable name SUBMENUITEMS.

Can anyone tell how can I get the submenu item variable name data: "--->this<--" as String?

let submenuItems = ["subMenu 1","subMenu 2","subMenu 3","subMenu 4","subMenu 5","subMenu 6"];

let main = {
    title:'main menu', 
    menuLogo:'img/logo1.png',
    data:submenuItems
}

Edit:

I see a lot of confusion. Actually this a part of my code which is written using Vuejs -

<div v-for="(item,index) in dataArray" v-on:click="subMenu(item)" v-bind:id="'tile_'+index" class="card">
                <div><img v-bind:src=item.menuLogo onerror="this.src='img/default.svg'" /></div>
                <div>{{item.title}}</div> 
                <div>{{index+1}}</div>
            </div>



let subhome = [ 
{"title":"sub_card_title","sub_cardimage":"sub_item1.png",data:[]},
{"title":"sub_card_title","sub_cardimage":"sub_item1.png",data:[]},    {"title":"sub_card_title","sub_cardimage":"sub_item1.png",data:[]},`
{"title":"sub_card_title","sub_cardimage":"sub_item1.png",data:[]}
] 

let home = [ 
{"title":"card_title","cardimage":"item1.png",data:[]},
{"title":"card_title","cardimage":"item1.png",data:subhome},    {"title":"card_title","cardimage":"item1.png",data:[]},`
{"title":"card_title","cardimage":"item1.png",data:[]}
] 



 let menu = new Vue({
        el: '#menu',
        data: {
            dataArray: home
        },
        methods: {
            subMenu: function(item) {
                if (item.data.length > 0) {
                    this.dataArray = item.data;
                    console.log('sub menu array -->', this.dataArray);
                    $('#menu-title').text(eval(item));
                }
            },setTitle: function(val) {
                 let title = eval(val); // <---- how to vaiable name of data array
                 $('#spancontainer').text(title)
            }  
        } 
    });
Greyfrog
  • 926
  • 1
  • 8
  • 19

1 Answers1

0

When you do

let submenuItems = ["subMenu 1","subMenu 2","subMenu 3","subMenu 4","subMenu 5","subMenu 6"];

let main = {
    title:'main menu', 
    menuLogo:'img/logo1.png',
    data:submenuItems
}

it is equating to

let main = {
    title:'main menu', 
    menuLogo:'img/logo1.png',
    data:["subMenu 1","subMenu 2","subMenu 3","subMenu 4","subMenu 5","subMenu 6"]
}

In order to get "submenuItems", you'd need to pass it as an object and get its key like this

let main = {
    title:'main menu', 
    menuLogo:'img/logo1.png',
    data:{
        submenuItems: submenuItems
    }
}
console.log(Object.keys(main.data)[0]);

or simply create a new property and set it to "submenuItems" like this

let main = {
    title:'main menu', 
    menuLogo:'img/logo1.png',
    data:{
        name: 'submenuItems',
        submenuItems: submenuItems
    }
}
console.log(main.data.name);
Joseph Webber
  • 2,010
  • 1
  • 19
  • 38
  • "*If you were to update `submenuItems`, `main.data` would not reflect the changes.*" This is only true for assignments to the `submenuItems` variable itself, as in `submenuItems = ...`. Any update of the array would be reflected. – melpomene Jun 14 '18 at 15:58
  • Your "proof" shows an assignment to `submenuItems`, which is what I said is the only kind of update that would not be reflected. Try `submenuItems[0] = "hi"` or `submenuItems.splice(1, 2)` instead. – melpomene Jun 14 '18 at 16:13
  • Sorry, I misunderstood, you're right. I'll edit my answer. – Joseph Webber Jun 14 '18 at 16:16