I am facing some strange behavior when I try to delete an object from an array.
Please have a look at code. I am using recursive function.
var obj = {
'id': '234567869',
'name': 'Lao Lao',
'title': 'general manager',
'children': [{
'id': '467876756634',
'name': 'Bo Miao',
'title': 'department manager'
}, {
'id': '2345666078',
'name': 'Su Miao',
'title': 'department manager',
'children': [{
'id': '898735342',
'name': 'Tie Hua',
'title': 'senior engineer'
}, {
'id': '7697347548',
'name': 'Hei Hei',
'title': 'senior engineer',
'children': [{
'id': '123415640',
'name': 'Pang Pang',
'title': 'engineer'
}, {
'id': '1237450976',
'name': 'Xiang Xiang',
'title': 'UE engineer'
}]
}]
}, {
'id': '6968756535',
'name': 'Yu Jie',
'title': 'department manager'
}, {
'id': '236448654',
'name': 'Chun Miao',
'title': 'department manager'
}, {
'id': '356898765',
'name': 'Yu Tie',
'title': 'department manager'
}]
};
function deleteNode(idToFind, bigObjectToSearch) {
var i, currentChild, result;
if (idToFind == bigObjectToSearch.id) {
//I try to delete the object here but can't :(
delete bigObjectToSearch;
return true;
} else if (bigObjectToSearch.children) {
for (i = 0; i < bigObjectToSearch.children.length; i += 1) {
currentChild = bigObjectToSearch.children[i];
// Search in the current child
if(deleteNode(idToFind, currentChild)){
break;
};
}
return false;
}
return false;
}
deleteNode('236448654', obj);
console.log(obj);
function deleteNodeFromArray(idToFind, bigObjectToSearch) {
var i, currentChild, result;
if (idToFind == bigObjectToSearch.id) {
//I try to delete the object here but can't :(
//delete bigObjectToSearch;
return true;
} else if (bigObjectToSearch.children) {
for (i = 0; i < bigObjectToSearch.children.length; i += 1) {
currentChild = bigObjectToSearch.children[i];
// Search in the current child
if(deleteNodeFromArray(idToFind, currentChild)){
//If I delete from here, it works.
delete bigObjectToSearch.children[i];
break;
};
}
return false;
}
return false;
}
deleteNodeFromArray('236448654', obj);
console.log(obj)
In first function, it doesn't delete the object with id="236448654".
In second function, it deletes the object. In both function code is same but just delete statement has different location.
Can any one please explain me this behavior ?
Thank you.