我有一个解析为 JSON 对象的字符串。现在我想检查每个对象键是否包含某个子字符串。在这种情况下,我想将其添加到我累积的对象中。不知怎的,我总是变得不确定。
代码如下:
const myString = '{ "Address__c": "3QAO", "Id": "OxWQAU", "Address__r": { "Address_Line_1__c": "kjj", "Address_Line_2__c": "kl", "Country__c": "United States", "State__c": "California", "Id": "a022M00001aJIW3QAO", "CountryLabel": "United States", "StateLabel": "California" } }';
const parsed = JSON.parse(myString);
const nameSpace = 'NameSpace__';
const newObj = Object.keys(parsed).reduce((acc,curr) => {
if(curr.includes('__c')){
return {...acc , [nameSpace + curr] : parsed[curr]};
}
},{})
console.log(newObj)
编辑:
因此添加 else 会得到以下结果:
{ NameSpace__Address__c: '3QAO' }
怎么可能只修改一个键呢。当超过 1 个包含此 '__c' 字符串时
最佳答案
除了添加 else { return acc }
之外,您的结果仅包含单个键是有原因的。
您的已解析
对象是:
{ Address__c: '3QAO',
Id: 'OxWQAU',
Address__r:
{ Address_Line_1__c: 'kjj',
Address_Line_2__c: 'kl',
Country__c: 'United States',
State__c: 'California',
Id: 'a022M00001aJIW3QAO',
CountryLabel: 'United States',
StateLabel: 'California' } }
这意味着Object.keys(parsed)
是:
[ 'Address__c', 'Id', 'Address__r' ]
所以这些是您可能的 curr
值。
如果您也想添加嵌套键,则可以使用递归方法,或者预先展平结构。
不干净的递归解决方案看起来像:
const myString = '{ "Address__c": "3QAO", "Id": "OxWQAU", "Address__r": { "Address_Line_1__c": "kjj", "Address_Line_2__c": "kl", "Country__c": "United States", "State__c": "California", "Id": "a022M00001aJIW3QAO", "CountryLabel": "United States", "StateLabel": "California" } }';
const parsed = JSON.parse(myString);
const nameSpace = 'NameSpace__';
const newObj = parsed => Object.keys(parsed).reduce((acc,curr) => {
if (parsed[curr] instanceof Object) {
return {...acc, ...newObj(parsed[curr])}
}
if(curr.includes('__c')) {
return {...acc , [nameSpace + curr] : parsed[curr]};
} else {
return acc;
}
},{})
console.log("result: ", newObj(parsed))
关于javascript - 减少条件未定义的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57569252/