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。
Note
:
在我的实际代码中,菜单数组的创建是在演示中页面加载时发生的,而我是在单击时创建的。也是我之所以在加载时创建的原因是,我将值存储在本地存储中。我使演示尽可能简单
答案 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>