i use this script for depth search in an object. I use a string to get or set the value in an object. I think code explain everything:
function _SetObjectByName(obj, prop, value) {
try {
if (typeof obj === 'undefined') {
return false;
}
let _index = prop.indexOf('.');
if (_index > -1) {
let _NestedObject = prop.substring(0, _index);
let _newProp = prop.substr(_index + 1);
if (_NestedObject.includes('[')) {
let ArrayElement = _NestedObject.match(/\d+/)[0];
_NestedObject = _NestedObject.substring(0, _NestedObject.indexOf('['));
return _SetObjectByName(obj[_NestedObject][parseInt(ArrayElement, 10)], _newProp, value);
}
return _SetObjectByName(obj[_NestedObject], _newProp, value);
}
obj[prop] = value;
}
catch(err) {
console.log('error');
}
}
My Object:
let Object5 = {
Bool: false,
Number1: 0,
Number2: 0,
Number3: 0,
Number4: 0,
Number5: 0,
Number6: 0,
Number7: 0
};
let Object4 = {
Text: '',
ObjectA: Object.assign({}, Object5),
ObjectB: Object.assign({}, Object5),
ObjectC: Object.assign({}, Object5),
ObjectD: Object.assign({}, Object5),
};
let Object3 = {
Text: '',
ObjectA: [ Object.assign({}, Object4),
Object.assign({}, Object4)
]
};
let Object2 = {
Text: '',
ObjectA: [ Object.assign({}, Object3),
Object.assign({}, Object3),
Object.assign({}, Object3),
Object.assign({}, Object3),
Object.assign({}, Object3),
Object.assign({}, Object3),
Object.assign({}, Object3),
Object.assign({}, Object3)
]
};
let Object1 = {
Text: '',
ObjectA: [ Object.assign({}, Object2),
Object.assign({}, Object2),
Object.assign({}, Object2),
Object.assign({}, Object2),
Object.assign({}, Object2),
Object.assign({}, Object2),
Object.assign({}, Object2),
Object.assign({}, Object2)
]
};
So now if i try this:
_SetObjectByName(Object1,'ObjectA[0].ObjectA[0].ObjectA[0].Text','Test1')
_SetObjectByName(Object1,'ObjectA[0].ObjectA[0].ObjectA[1].Text','Test2')
it works as expected -> different values, but if do this:
_SetObjectByName(Object1,'ObjectA[0].ObjectA[0].ObjectA[0].ObjectA.Number1',1)
i have a problem. All Array Elements of ObjectA[0].ObjectA[0].ObjectA[X].ObjectA.Number1 are 1. Can someone explain me why?