如何替换对象的深层值?

时间:2020-06-13 04:51:49

标签: javascript

以下是带有深厚道具的物体。

如何替换以下属性

name: 'name'

与:

name: 'replaced_name'
const sample_object = {
    prop1: {
        subprop1: {
            anothersubprop1: {
                properties: {
                    deepProp1: {
                        name: 'name' 
                    }
                },
                '$ref': {

                },
                name: 'name'
            }
        }
    },
        prop2: {
        subprop1: {
            anothersubprop1: {
                properties: {
                    deepProp1: {
                        name: 'name' 
                    }
                },
                '$ref': {

                },
                name: 'name'
            },
            name: 'name'
        },
                subprop2: {
            anothersubprop1: {
                properties: {
                    deepProp1: {
                        name: 'name' 
                    },
                    deepProp2: {
                        name: 'name' 
                    }
                },
                '$ref': {

                },
                name: 'name'
            },
                        anothersubprop2: {
                properties: {
                    deepProp1: {
                        name: 'name' 
                    },
                    deepProp2: {
                        name: 'name' 
                    }
                },
                '$ref': {

                },
                name: 'name'
            },

            name: 'name'
            ...
        }
    },
}

预期结果:

const sample_object = {
    prop1: {
        subprop1: {
            anothersubprop1: {
                properties: {
                    deepProp1: {
                        name: 'replaced_name' 
                    }
                },
                '$ref': {

                },
                name: 'replaced_name'
            }
        }
    },
        prop2: {
        subprop1: {
            anothersubprop1: {
                properties: {
                    deepProp1: {
                        name: 'replaced_name' 
                    }
                },
                '$ref': {

                },
                name: 'replaced_name'
            },
            name: 'replaced_name'
        },
                subprop2: {
            anothersubprop1: {
                properties: {
                    deepProp1: {
                        name: 'replaced_name' 
                    },
                    deepProp2: {
                        name: 'replaced_name' 
                    }
                },
                '$ref': {

                },
                name: 'replaced_name'
            },
                        anothersubprop2: {
                properties: {
                    deepProp1: {
                        name: 'replaced_name' 
                    },
                    deepProp2: {
                        name: 'replaced_name' 
                    }
                },
                '$ref': {

                },
                name: 'replaced_name'
            },

            name: 'replaced_name'
            ...
        }
    },
}

如果可以使用lodash或任何其他类似的库,请提出建议 或任何自定义代码

2 个答案:

答案 0 :(得分:0)

您可以编写一个递归帮助器

onPrepareOptionsMenu

答案 1 :(得分:0)

您可以将对象更改为字符串,然后将旧值替换为新值,然后使用JSON.parse将字符串再次作为对象

示例:

let str = JSON.stringify(sample_object)
str = str.replace(/"name":"name"/g, '"name":"replaced_name"') // g -> for replace all the occurrences of the `name: name`
console.log(JSON.parse(str))