javascript - 减少条件未定义的返回

标签 javascript object reduce

我有一个解析为 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/

相关文章:

java - 色彩还原(Java 中)

javascript - React - 计算仅部分工作的元素之间的较大值

php - 在 php 中一起创建多个对象时哪个更有效?

javascript - 通过另一个预定义的数组元素作为键来重构 JavaScript 对象数组

javascript - 是否可以提前改变任何对象方法的行为?

javascript - Bootstrap typeahead 存储更多值

javascript - 遍历javascript对象IE8

javascript - 如何使用字符串作为选择器在对象中设置数据?

java - 使用stream和reduce将Java String中的第n个字符乘以2?

javascript - 将 Java 变量值存储到 JavaScript/jQuery 变量中