Я изо всех сил пытаюсь понять, как изменить эту функцию setValue (), чтобы, когда она встречает числовой сегмент пути, создается массив, если он не существует. Я пробовал назначать [] вместо {}, когда сегмент пути числовой, но он работает не так, как ожидалось.
var obj = {};
setValue(obj, "Application.0.Employment.0.Id", 1);
//Not working because objects are not created as arrays
obj.Application[0].Employment.push({ Id: 2 });
function setValue(object, path, value) {
var a = path.split('.');
var o = object;
for (var i = 0; i < a.length - 1; i++) {
var n = a[i];
if (n in o) {
o = o[n];
} else {
//o[n] = isNaN(n) ? {} : [];
o[n] = {};
o = o[n];
}
}
o[a[a.length - 1]] = value;
}



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


Вам нужно смотреть вперед на один указатель. Попытку, которую вы указали в комментариях, следует изменить на:
o[n] = isNaN(a[i+1]) ? {} : [];
function setValue(object, path, value) {
var a = path.split('.');
var o = object;
for (var i = 0; i < a.length - 1; i++) {
var n = a[i];
if (n in o) {
o = o[n];
} else {
o[n] = isNaN(a[i+1]) ? {} : [];
o = o[n];
}
}
o[a[a.length - 1]] = value;
}
var obj = {};
setValue(obj, "Application.0.Employment.0.Id", 1);
console.info(JSON.stringify(obj));
obj.Application[0].Employment.push({ Id: 2 });
console.info(JSON.stringify(obj));