【发布时间】:2018-04-19 01:50:58
【问题描述】:
我正在研究一种利用 JavaScript 中 JSON.Stringify 中的替换函数参数来更改单词大小写(toUpper /toLower case)的方法,问题是我的 JSON 不是直接键:值,有些值也是键,它们本身也有值,所以我需要遍历所有键和值,检查值是否也是键,并确保我更改了所有键和值的大小写(toUpper 或 toLower)。 我知道 JSON.Stringify(object,ReplacerFunction) 中的替换函数遍历所有键和值并在内部进行修改然后返回键和值,但是尽管我已经阅读了一段时间但我无法应用它,并且我不确定是否应该在替换函数中应用递归或如何应用,任何帮助表示赞赏。
我拥有的代码:
function _replacer(name,val){
if(typeof val != "object"){
return val.toString().toUpperCase()
}
if(typeof name != "object"){
return name.toString().toUpperCase()
}
console.log("key = "+name+" type: "+typeof name);
console.log("value ="+val+" type: "+typeof val);
}
还有:
function _replacer(name,val){
if(typeof val != "object" &&typeof val ==="string"){
return val=val.toUpperCase()
}
if(typeof name != "object" &&typeof name ==="string"){
name=name.toUpperCase()
}
return val;
}
另外,我终于到了这个阶段:
var res = JSON.parse(JSON.stringify(j, function(key, value) {
return typeof value === "string" ? value.toUpperCase() : value
}));
但是这段代码只大写了非常低级别的值,而不是所有的键/值,原因是因为我只能从替换函数返回一个值,在这种情况下是值。
【问题讨论】:
-
分享你试过的代码。
-
@jmargolisvt,共享。
-
令我惊讶的是,有多少人更倾向于对我的合理问题投反对票,而不是说些有用的话。
-
在 Javascript 中的键不能是对象。对于您添加到对象的任何键
k,都会调用k.toString()。使用var key = { toString() { return "test" } }; var obj = { [key]: key }; JSON.stringify(obj) === '{"test":{}}'进行验证。 -
我对这部分感到困惑:
some values are keys also and they have values themselves, so I need to go through all keys and values。所有 json 键都与某个值相关。 “值”不是“键”。现在该值可能是不同的数据类型(即数组、对象和字符串)。您是否只是想对整个 json 对象进行深度遍历,将字符串类型的任何内容大写?
标签: javascript json node.js recursion