JSFiddle - React, Tailwind, and code Playground
JavaScript
console.clear()
var data = {
"search[id]": 1,
"search[ids]": "",
"search[entity_name]": "",
"search[field_name]": "",
"search[field_format][a]": "asdf",
"search[field_format][b]": "bzzt",
"page": 5,
"per_page": 7
}
var key, keys, currElem, result = {}
for(key in data) {
if (keys = key.match(/\[[^\]]*\]/g)) { // получаем все ключи
var prefix = key.substr(0, key.indexOf('[')) // коренвой ключ
if(!(prefix in result)) { // если нет такого элемента
result[prefix] = {} // создаем его
}
currElem = result[prefix] // и запоминаем ссылку на него
keys.forEach((elem, index)=>{ // перебираем остальные ключи
elem = elem.slice(1, -1) // обрезаем скобки
if(!(elem in currElem)) { // если нет такого элемента
// создаем пустой объект. если последний в цепочке - присваеваем значение
currElem[elem] = index == keys.length - 1 ? data[key] : {}
}
currElem = currElem[elem]
})
console.log(prefix, keys)
} else {
result[key] = data[key]
}
}
console.log(result)