У меня есть такой объект
var obj = {
'Lorem': 'foo',
'Ipsum[0]': 'bar',
'Ipsum[1]': 'stuff',
'Dolor[0][0]': 'foo',
'Dolor[0][1]': 'bar',
'Dolor[1][0]': 'stuff',
'Dolor[1][1]': 'foo'
};
И я бы хотел превратить это в это
var obj = {
'Lorem': 'foo',
'Ipsum': ['bar', 'stuff'],
'Dolor': [
['foo', 'bar'],
['stuff', 'foo']
]
};
Я откопал отсюда, что с .match(/[^\[\]]+/g) я могу получить значения между скобками, но я не могу понять, что с ними делать.
@NinaScholz Моя ошибка, отредактировано.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать регулярное выражение (я добавил точку для вложенных объектов) и сократить путь, пройдя данный объект. Если объект не существует, создайте новое свойство с именем или массивом. Позже присвойте значение.
function setValue(object, path, value) {
var way = path.match(/[^\[\].]+/g),
last = way.pop();
way.reduce(function (o, k, i, kk) {
return o[k] = o[k] || (isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {});
}, object)[last] = value;
}
var obj = { 'Lorem': 'foo', 'Ipsum[0]': 'bar', 'Ipsum[1]': 'stuff', 'Dolor[0][0]': 'foo', 'Dolor[0][1]': 'bar', 'Dolor[1][0]': 'stuff', 'Dolor[1][1]': 'foo' };
Object.keys(obj).forEach(function (k) {
var v = obj[k];
delete obj[k];
setValue(obj, k, v);
});
console.info(obj);
Кстати,
'Ipsum[0]': 'stuff',перезаписывает'bar'.