JSFiddle - React, Tailwind, and code Playground
JavaScript
var object = {};
object.set = function(key, value) {
var parts = key.split(".");
var current = this; // begin at root
var arrayRegex = /(\w+)\[(\d+)\]/, nameAndIndex, name, index;
while(parts.length) {
part = parts.shift();
nameAndIndex = part.match(arrayRegex);
// property is an array
if(nameAndIndex != null) {
name = nameAndIndex[1];
index = nameAndIndex[2];
current[name] = current[name] || [];
current[name][index] = current[name][index] || {};
current = current[name][index];
}
// property is an object
else {
current[part] = current[part] || {};
}
}
current[part] = value;
};
object.set('phones[0].phoneType', 1);
object.set('phones[0].phone', '312-223-4929');
object.set('phones[0].details[0].areaCode', '312');
object.set('phones[0].details[0].region[0].name', 'Alaska');
object.set('phones[0].details[0].region[1].name', 'California');
object.set('phones[1].phoneType', 2);
object.set('phones[1].phone', '408-332-3011');
console.log(object);