P粉7953113212023-08-21 11:38:17
Javascript에서 전체 복사 기술은 배열의 요소에 따라 다릅니다. 여기서 시작해 보겠습니다.
요소는 리터럴 값, 리터럴 구조 또는 프로토타입일 수 있습니다.
으아악이러한 요소에서 세 가지 유형의 배열을 만들 수 있습니다.
으아악배열의 요소 유형에 따라 다양한 기술을 사용하여 전체 복사를 수행할 수 있습니다.
https://www.measurethat.net/Benchmarks/Show/17502/0/deep-copy-comparison
리터럴 배열(유형 1)
[ ...myArray ]
、myArray.splice(0)
、myArray.slice()
和 myArray.concat()
技术来深拷贝只包含字面值(布尔值、数字和字符串)的数组;其中在Chrome中,slice()
的性能最高,在Firefox中,扩展运算符 ...
를 사용하면 최대 성능을 얻을 수 있습니다.
리터럴 값 배열(유형 1) 및 리터럴 구조 배열(유형 2)
JSON.parse(JSON.stringify(myArray))
기술을 사용하여 리터럴 값(부울 값, 숫자, 문자열) 및 리터럴 구조(배열, 개체)를 심층 복사할 수 있지만 프로토타입 개체는 복사할 수 없습니다.
모든 배열(유형 1, 유형 2, 유형 3)
cloneDeep(myArray)
또는 jQuerycloneDeep(myArray)
或 jQuery 的 extend(true, [], myArray)
技术来深拷贝所有类型的数组。其中Lodash的 cloneDeep()
의 extend를 사용할 수 있습니다. (true, [], myArray)
모든 유형의 배열을 심층 복사하는 기술입니다. 그 중 Lodash의 cloneDeep()
기술이 가장 성능이 좋습니다. cloneDeep()
,但高于 extend(true)
보다 성능이 낮은 모든 유형의 배열을 딥 복사할 수 있습니다. 왜냐하면 arr1
是一个包含字面值(布尔值、数字或字符串)的数组,你可以使用上面讨论的任何深拷贝技术,其中 slice()
和扩展运算符 ...
가 가장 성능이 좋거든요.