Skip to main content
 首页 » 编程设计

Javascript之迭代深层嵌套对象并更改某些未知值

2025年05月04日11del

我有一个未知数量的级别和类型(数组、对象、字符串)的对象,这是一个示例:

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: \n\nIssue: (copy/paste service request details here)\n\nAction Required:', 
} 

我必须使用纯 javascript 遍历每个属性并清理每个具有 ' to have '' 的字符串(用于 PostGres 查询),我使用以下代码对其进行更改:
val = val.replace(/'/g, "''"); 

我可以遍历对象并以此显示它们,尽管这可能不是最好的解决方案:
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); 

问题是我不知道如何实际进行清理部分并更新原始数据数组,因为这是循环的。

我发现很多人都在问类似的问题,但在我的情况下无法完全得到他们的答案。

任何帮助表示赞赏。

请您参考如下方法:

您可以检查对象并再次调用递归。

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: \n\nIssue: (copy/paste service request details here)\n\nAction Required:' }; 
 
iter(data); 
console.log(data);