0
点赞
收藏
分享

微信扫一扫

前端的深浅拷贝,你知道几种?

1.正统版

function deepClone(obj) {
  const objectMap = new Map();
  const _deepClone = (value) => {
    const type = typeof value;
    if (type !== "object" || value === null) {
      return value;
    }
    if (objectMap.has(value)) {
      return objectMap.get(value);
    }
    const result = Array.isArray(value) ? [] : {};
    objectMap.set(value, result);
    for (const key in value) {
      result[key] = _deepClone(value[key]);
    }
    return result;
  };
  return _deepClone(obj);
}

const obj = {
  'a' : 1,
  'b' : {
    'c': 2
  }
}
obj.d = obj
console.log(deepClone(obj))

2.少见但牛逼版(异步)

function deepClone(obj) {
  return new Promise((resolve) => {
    const { port1, port2 } = new MessageChannel();
    port1.postMessage(obj);
    port2.onmessage((msg) => {
      resolve(msg.data);
    });
  });
}
var obj = {'a': 1}
deepClone(obj).then(res => {
  console.log('deep clone...', res)
})

3.炫技版

const obj = {
  a: 1,
  b: {
    c: 2,
  },
};

let newObj = window.structuredClone(obj)
console.log(newObj)


举报

相关推荐

0 条评论