为对象jQuery数组创建动态索引

时间:2018-12-14 05:44:31

标签: jquery arrays

var menu = [];
$('.mainmenu').click(function() {
  $('.mainmenu').each(function(i,v) {

    var sub = {};
    var indexmenu = $(this).attr('id');
    sub[indexmenu] = $(this).attr('data-currstate');
    menu.push(sub);

  })
  $.each(menu,function(i,v) {
    console.log(i)
    console.log(v)
  })
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a target="_top" href="#" class='mainmenu' id='maintenance' data-currstate='hide'>
  <i class="fa fa-cogs"></i> Maintenance
</a>

我想从菜单中创建对象数组,其中我希望每个菜单的ID都为索引,并且值将为state。

  1. 我希望每个菜单的ID都为索引,状态为值
  2. 我得到的是id,值变成了值

Note

在我的实际代码中,菜单数组的创建是在演示中页面加载时发生的,而我是在单击时创建的。也是我之所以在加载时创建的原因是,我将值存储在本地存储中。我使演示尽可能简单

1 个答案:

答案 0 :(得分:1)

您可以使用Map代替对象。

这是ES6的一部分,因此您将遇到浏览器兼容性问题。您可以检查compatibility

ES6引入了2个新类:Map和Set,它们与Array和Objects类似,但有1个主要区别。他们的keys可以是任何东西。因此,您也可以将数组索引作为非数字值。如果您希望它们具有独特性,可以查看Set

var menu = new Map();
$('.mainmenu').click(function() {
  $('.mainmenu').each(function(i,v) {
    menu.set($(this).attr('id'), $(this).attr('data-currstate'));
  })
  for( const [k, v] of menu.entries()) {
    console.log(`Key: ${k} | Value: ${v}`)
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a target="_top" href="#" class='mainmenu' id='maintenance' data-currstate='hide'>
  <i class="fa fa-cogs"></i> Maintenance
</a>