我正在研究一种利用JSON中的替换函数参数的方法。Stringify在JavaScript中为了更改单词大小写(toTop /toLowercase),问题是我的JSON不是直键:value,有些值也是键,它们本身也有值,所以我需要遍历所有键和值,检查值是否也是键,并确保我更改所有键和值的大小写(toTop或toDown)。我知道JSON. Stringify(对象,Replace erFunction)中的替换函数遍历所有键和值,并在其中进行修改,然后返回键和值,但尽管我已经阅读了一段时间,但我不能应用它,我不确定是否应该在替换函数中应用递归或如何应用,感谢任何帮助。
我拥有的代码:
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
}));
但这段代码只对非常低级别的值进行大写,而不是所有的键/值,原因是我只能从replacer函数返回一个值,在本例中是值。
JSON中的
,不允许您替换MDN中记录的密钥。它允许您转换值,或完全省略键/值对(通过返回replacer
函数。stringify未定义的
)。
最好的办法可能是在串化对象之前对其进行变换。下划线或Lodash将使这变得非常简单,但您可以在本机上完成,而不需要像这样太多麻烦:
const xform = obj => {
return Object.keys(obj).reduce((xformed, key) => {
let value = obj[key]
if (typeof value ==='string') value = value.toUpperCase()
else if (typeof value === 'object') value = xform(value)
xformed[key.toUpperCase()] = value
return xformed
}, {})
}
console.log(JSON.stringify(xform({a: 'b', c: 1, d: {e: 'f'}})))
// {"A":"B","C":1,"D":{"E":"F"}}
如果您愿意,您还可以使用正则表达式并在字符串化后替换
。代码当然更短,但可能更难读:
const stringified = JSON.stringify({a: 'b', c: 1, d: {e: 'f'}})
console.log(stringified.replace(/".+?"/g, s => s.toUpperCase()))
// {"A":"B","C":1,"D":{"E":"F"}}
我通过一个接一个地放置值来创建HashMap。当我在每次迭代后打印hashmap时,生成的hashmap包含所有键的相同值。我不明白为什么会这样。我已经粘贴了下面的输出 HashMap(String,List(Object))mRestrictions; 输出:- 逐个限制:-{profile\u name=[Test1]} 逐个限制:-{profile\u name=[url],url=[url
问题内容: 我想替换JavaScript字符串中所有出现的dot() 例如,我有: 我想得到:。 到目前为止,我尝试了: 但这最终将所有字符串替换为空格。 问题答案: 您需要对进行转义,因为它在正则表达式中具有“任意字符”的含义。
我正在尝试用大量新值替换所有文档。 例如,我们在数据库中500k文档,并且我们500k了相同的文档,其中包含更新的道具。现在我们需要更新旧数据。 想法是在新集合中使用InsertMany with lean选项,然后删除旧集合以减少读/写次数。 问题是,对于这种情况,有没有更简单的方法? 在这种情况下,也许连进出口都更好? PS模型。updateMany()有一个过滤器,我们这里不需要过滤器,因为
如何替换所有标签
问题内容: 我是否缺少某些东西,或者StringBuilder是否缺少与普通String类相同的“用字符串B替换所有出现的字符串A”功能?StringBuilder的替换功能并不完全相同。有没有什么方法可以更有效地使用普通的String类生成多个String? 问题答案: 好了,你可以编写一个循环: 请注意,在某些情况下,从背面开始使用可能会更快。我怀疑是用短字符串替换长字符串的情况-因此,当你开
问题内容: 我有这个字符串: 正在做: 似乎只删除了上面字符串中的第一个匹配项。 如何替换 所有 出现的内容? 问题答案: 注意:请勿在对性能有要求的代码中使用此代码。 作为简单文字字符串的正则表达式的替代方法,您可以使用 一般模式是 在某些情况下,它过去比使用和正则表达式要快,但是在现代浏览器中,情况似乎不再如此。 结论:如果您有性能至关重要的用例(例如,处理数百个字符串),请使用Regexp方