Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
90
rated 0 times [  94] [ 4]  / answers: 1 / hits: 16441  / 8 Years ago, tue, july 26, 2016, 12:00:00

I have an object with an unknown number of levels and types (array, object, string), here is an example:



var data = {
ffs: false,
customer: {
customer_id: 1544248,
z_cx_id: '123456',
},
selected_items: {
'3600196': [{
id: 4122652,
name: 'Essential Large (up to 8'x10')',
selected: true
}]
},
service_partner: {
id: 3486,
name: 'Some String',
street: '1234 King St.',
},
subject: 'Project-2810191 - Orange Juice Stain (Rug)',
description: 'Product Type: nnIssue: (copy/paste service request details here)nnAction Required:',
}


I have to loop through every property using plain javascript and sanitize each string that has a ' to have '' (for use in a PostGres Query), I change it with the following code:



val = val.replace(/'/g, '');


And I can loop through the object and display them with this, although this may not be the best solution:



function iterObj(obj) {
for (var key in obj) {
console.log(key + ': ' + obj[key]);
if (obj[key] !== null && typeof obj[key] === object) {
// Recurse into children
iterObj(obj[key]);
}
}
}

iterObj(data);


The problem is that I don't know how to actually do the sanitization part and update the original data array since this is going in circles.



I found plenty of people asking similar questions but couldn't quite get their answers to work in my case.



Any help is appreciated.


More From » recursion

 Answers
35

You could check for an object and call the recursion again.





function iter(o) {
Object.keys(o).forEach(function (k) {
if (o[k] !== null && typeof o[k] === 'object') {
iter(o[k]);
return;
}
if (typeof o[k] === 'string') {
o[k] = o[k].replace(/'/g, '');
}
});
}

var data = { ffs: false, customer: { customer_id: 1544248, z_cx_id: '123456' }, selected_items: { '3600196': [{ id: 4122652, name: 'Essential Large (up to 8'x10')', selected: true }] }, service_partner: { id: 3486, name: 'Some String', street: '1234 King St.' }, subject: 'Project-2810191 - Orange Juice Stain (Rug)', description: 'Product Type: nnIssue: (copy/paste service request details here)nnAction Required:' };

iter(data);
console.log(data);




[#61244] Saturday, July 23, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
earllutherf

Total Points: 412
Total Questions: 108
Total Answers: 102

Location: Argentina
Member since Thu, Mar 18, 2021
3 Years ago
;