从另一个分层对象创建分层对象

安娜·温德洛娃(Anna Wenderova)

我需要从另一个创建一个新对象。例如。这是一个旧对象:

const objectOld = { 
  level1: { 
    level2: { 
      level3: { 
        code: 123, 
        error: 'Message' 
      }  
    } 
  } 
}

这是我根据旧对象创建的新对象。

const objectNew = { 
  level1: { 
    level2: { 
      level3: { 
        error: {
           code: 123, 
           key: 'Message' 
        }
      }  
    } 
  } 
}

深度当然可以不同。

有人能帮我吗?

kemicofa鬼

您可以通过撤消,Array#reduce,Object#entries和一些破坏来实现此目的。

这将深度复制您的对象,并在{ error: { code: string, key: string } }检测到具有codemessage属性的对象时创建

如果对象没有这些属性,它将自行调用并继续。

如果value不是对象,则将该值保持原样。

const objectOld = { 
  level1: { 
    level2: { 
      level3: { 
        code: 123, 
        error: 'Message' 
      }  
    } 
  } 
};


function transform(obj){
  return Object
  .entries(obj)
  .reduce((acc, [key, value])=>{
    if(typeof value === 'object'){
      if("code" in value && "error" in value){
        acc[key] = {
          error: {
            key: value.error,
            code: value.code
          }
        }
      } else {
        acc[key] = transform(value)
      }
    } else {
      acc[key] = value;
    }
    return acc;
  }, {});
}

const objectNew = transform(objectOld);

console.log(
  objectNew
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章