Back

structuredClone()

최근 recoil의 useRecoilValue를 사용하여 가져온 객체에 프로퍼티를 추가하려니 되지가 않아, lodash의 cloneDeep() 을 사용했다고 글을 썼다.

그런데 좋은 것을 발견했다. structuredClone()이라는 함수인데, 별도의 라이브러리 설치 없이 사용 가능한 내장함수다.

이것을 벤치마크 비교를 해보니 성능도 좋다.

recursiveDeepCopy라는 함수는 벤치마크 생성한 사람이 만든 함수다.

function recursiveDeepCopy(o) {
  var newO, i;

  if (typeof o !== 'object') {
    return o;
  }
  if (!o) {
    return o;
  }

  if ('[object Array]' === Object.prototype.toString.apply(o)) {
    newO = [];
    for (i = 0; i < o.length; i += 1) {
      newO[i] = recursiveDeepCopy(o[i]);
    }
    return newO;
  }

  newO = {};
  for (i in o) {
    if (o.hasOwnProperty(i)) {
      newO[i] = recursiveDeepCopy(o[i]);
    }
  }
  return newO;
}

최근에 추가가 되어 레퍼런스가 많이 없어서 못봤던 것 같다. 예전에는 무조건 직접 만들거나, 라이브러리를 사용해야 했기에 그런 것 같다.

앞으로 객체 깊은복사를 할 일이 있을 때 유용하게 써야겠다.


2023-01-28 에 발견한 사실인데, 이는 web api여서 node.js에서는 사용할 수 없다. 직접 구현을 하거나 다른 방법을 사용해야 한다.

그런데 또 node 버전에 따라서는 사용할 수 있다고 하여 확인을 해봤다.

최신의 node 버전에서는 사용할 수 있다.