Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用正则表达式删除对象上的下划线映射_Javascript_Regex_Object - Fatal编程技术网

Javascript 无法使用正则表达式删除对象上的下划线映射

Javascript 无法使用正则表达式删除对象上的下划线映射,javascript,regex,object,Javascript,Regex,Object,我遇到过与此类似的问题,但它们通常涉及如何删除下划线,而我遇到的问题是如何在for循环中删除下划线。当控制台登录到我的函数中时,它将显示我想要更改的字段实际上是更改的,但是当我返回对象时,它只返回一个所有键都有蛇壳的对象。我认为这可能是一个范围问题,但在处理变量的不同位置后,我一直陷入困境。下面是我想更改的原始对象的示例: const originalObj = { accountNumber: '12345', company: [ { address: {

我遇到过与此类似的问题,但它们通常涉及如何删除下划线,而我遇到的问题是如何在for循环中删除下划线。当控制台登录到我的函数中时,它将显示我想要更改的字段实际上是更改的,但是当我返回对象时,它只返回一个所有键都有蛇壳的对象。我认为这可能是一个范围问题,但在处理变量的不同位置后,我一直陷入困境。下面是我想更改的原始对象的示例:

const originalObj = {
  accountNumber: '12345',
  company: [
    {
      address: {
        line1: '123',
        line2: 'Spring Street'
      }
    }
  ],
  ownerInfo: [
    {
      firstName: 'John',
      lastName: 'Doe'
      enrollment: '2015-10-15'
    }
  ],
  tax: {
    code: '12345'
  }
}
使用npm软件包
change case object
我能够成功地将所有带有驼峰壳的密钥更改为蛇壳。但是,我不希望任何具有数值的键包含下划线(如第1行和第2行的情况)。具有此功能

import changeCaseObject from 'change-case-object';

export function restructure(originalObj) {
  const regex = /\d/g;
  let newObj;
  if(typeof originalObj === "object"){
    newObj = changeCaseObject.snakeCase(originalObj);
    for(const key in newObj){
      if(typeof newObj[key] === "object" && newObj[key] !== null){
        restructure(newObj[key])
        //if the value is an object use recursion
      } else {
        if(regex.test(key)){
          let newKey = key.replace(/_/g, '');
          newObj.newKey = newObj.key;
          delete newObj.key;
        }
      }
    }
  }
  return newObj;
}
当我在键与正则表达式匹配的情况下添加控制台日志时,它将显示“line_1”实际上与“line_2”一起更改为“line1”。但是,当返回
newObj
时,它只返回所有值现在都有snake-case的对象(如下所示)


我觉得我忽略了一件非常简单的事情,但在if-else语句之外定义
newObj
也没有带来成功。谢谢您的时间。

关键是常量,请在此处阅读更多内容:@PoulBak Ah这很有意义,但是我将originalObj更改为let,但仍然会导致相同的错误:/
{
  account_number: '12345',
  company: [
    {
      address: {
        line_1: '123',
        line_2: 'Spring Street'
      }
    }
  ],
  owner_info: [
    {
      first_name: 'John',
      last_name: 'Doe'
      enrollment: '2015-10-15'
    }
  ],
  tax: {
    code: '12345'
  }
}