我有一个像这样的 json 对象:
var obj = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
此 JSON 可以是任何有效的 JSON。现在我想基于可用的数组访问和更新一些属性,如下所示:
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'SortAs'] // any dynamic but valid path
所以给定上面的数组,我想访问
obj['glossary']['GlossDiv']['GlossList']['GlossEntry']['SortAs']
这样我就可以更新它的值。我有 config(或任何此类 json)作为实例变量,所以我想直接更新它,而不是创建一个新的 json,然后替换整个 config 对象。我可以访问 jQuery、underscore、backbone,当然还有普通的旧 JS。
最佳答案
您可以通过沿着路径行走来减少物体。
function getValue(object, path) {
return path.reduce(function (o, k) {
return (o || {})[k];
}, object);
}
var object = { glossary: { title: "example glossary", GlossDiv: { title: "S", GlossList: { GlossEntry: { ID: "SGML", SortAs: "SGML", GlossTerm: "Standard Generalized Markup Language", Acronym: "SGML", Abbrev: "ISO 8879:1986", GlossDef: { para: "A meta-markup language, used to create markup languages such as DocBook.", GlossSeeAlso: ["GML", "XML"] }, GlossSee: "markup" } } } } };
console.log(getValue(object, ['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'SortAs']));
关于javascript - 根据可作为数组使用的动态键更新 json 对象中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40405940/