javascript - 在 JS 中构建多维对象

标签 javascript arrays

我有这些按钮:

<button data-action="book-unit" data-room_id="123" data-room_name="Apartment #" data-room_nights_nb="1" date-room_nights_list="2019-06-07" data-room_night_price="110.00">...</button>

<button data-action="book-unit" data-room_id="124" data-room_name="House #" data-room_nights_nb="1" date-room_nights_list="2019-06-07" data-room_night_price="125.00">...</button>

我需要从这些按钮创建以下对象:

{
    '123' : {
        'room_name' : 'Apartment #12',
        'room_nights_nb' : '1',
        'room_nights_list' : '2019-06-07',
        'room_night_price' : '110.00'
    },
    '124' : {
        'room_name' : 'House #2',
        'room_nights_nb' : '1',
        'room_nights_list' : '2019-06-07',
        'room_night_price' : '125.00'
    }
}

这是我在此处发布之前尝试过的: var BOO_UnitsList = new Array();

$('.btn-success').each(function(index) {
    var room_id[$(this).data('room_id')] = [
        room_id = $(this).data('room_id'), 
        room_name = $(this).data('room_name'), 
        room_nights_nb = $(this).data('room_nights_nb'), 
        room_nights_list = $(this).data('room_nights_list'), 
        room_night_price = $(this).data('room_night_price')
    ];

    console.log(room_id[$(this).data('room_id')]);
});

最佳答案

我不确定你将如何触发这个,但你可以使用 Element.attributes获取节点上的所有属性并循环它们,然后将其推送到结果对象上,如下所示:

let result = {}
let btns = [...document.querySelectorAll('button')].forEach(btn => {
  let obj = {}
  // Items to ignore
  let ignore = ['data-action', 'data-room_id']
  // The room id
  let id = 0
  // Loop over the buttons attributes
  for (let a of btn.attributes) {
    // Get the room id
    if(a.name == 'data-room_id') id = a.value
    // If we want to ignore the value skip it
    if(ignore.includes(a.name)) continue
    // Add the item to the child object
    obj[a.name.replace(/^data-/, '')] = a.value
  }
  
  // Add the child object to the final object
  result[id] = obj
})

console.log(result)
<button data-action="book-unit" data-room_id="123" data-room_name="Apartment #" data-room_nights_nb="1" date-room_nights_list="2019-06-07" data-room_night_price="110.00">...</button>

<button data-action="book-unit" data-room_id="124" data-room_name="House #" data-room_nights_nb="1" date-room_nights_list="2019-06-07" data-room_night_price="125.00">...</button>

关于javascript - 在 JS 中构建多维对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498618/

相关文章:

arrays - 更新 Matlab 结构数组的每个元素中的一个字段

ios - 如何在字典数组中搜索元素?

arrays - 警告 "Simultaneous accesses to parameter ' self' ..."真的适用于此吗?

javascript - 使用普通 Javascript 隐藏所有带有类的元素

javascript - 附加表的位置不完全显示它在哪里

javascript - HTML/JavaScript/CSS/PHP 代码将宽度 % 更新为以像素为单位的高度

javascript - 自定义 console.log 函数,告诉您它被调用的行

javascript - 如何在Javascript中显示运行计数器?

javascript - 如何从 JSON 中提取特定值到 map 上?

c++ - 数组损坏其字符 C++