js解决多层数据对象的深拷贝问题(递归)

2年前 (2022) 程序员胖胖胖虎阿
220 0 0
const deepCopy = (instance) => {
  // 递归开始,判断参数是数组还是对象
  const result = Array.isArray(instance) ? [] : instance instanceof Object ? {} : null
  if (result === null) {
    throw new Error(`需要传入Array或Object类型的参数,但现在是${typeof instance}类型的参数`)
  }
  // 如果参数是数组,开启for循环遍历数组
  if (Array.isArray(instance)) {
    for (let i = 0; i < instance.length; i++) {
      const inst = instance[i]
      // 如果数组中某个索引对应的是对象,就对其进行递归并赋值,否则直接赋值
      result[i] = inst instanceof Object ? deepCopy(inst) : inst
    }
    // 如果参数是对象,开启for...in循环遍历对象
  } else if (instance instanceof Object) {
    for (const key in instance) {
      // 如果对象中某个key对应的是一个数组或者对象,那么就对其递归并赋值给当前值,否则直接赋值
      const condition = Array.isArray(instance[key]) || instance[key] instanceof Object
      result[key] = condition ? deepCopy(instance[key]) : instance[key]
    }
  }
  return result
}
版权声明:程序员胖胖胖虎阿 发表于 2022年11月6日 下午12:32。
转载请注明:js解决多层数据对象的深拷贝问题(递归) | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...