객체의 모든 키를 소문자로 변환하는 가장 효율적인 방법은 무엇입니까?
P粉066224086
P粉066224086 2023-08-22 12:42:40
0
2
572
<p>저는 다음과 같은 해결책을 생각해냈습니다</p> <pre class="brush:php;toolbar:false;">functionkeyToLowerCase(obj) { var 키 = Object.keys(obj); var n = 키.길이; 동안 (n--) { var key =keys[n]; // 배열 조회 횟수를 줄이기 위해 "캐시"합니다. if (key !== key.toLowerCase()) { // 이미 소문자일 수 있습니다. obj[key.toLowerCase()] = obj[key] // 값을 새로운 소문자 키로 바꿉니다. delete obj[key] // 이전 키 삭제 } } 반환(obj); }</pre> <p>그러나 v8이 이를 어떻게 처리할지는 잘 모르겠습니다. 예를 들어 실제로 다른 키를 삭제하게 될까요, 아니면 참조만 삭제하면 가비지 컬렉터가 뒤처지게 될까요? </p> <p>또한 저는 이러한 테스트를 만들었으며 귀하의 답변을 거기에 추가하여 두 테스트가 어떻게 일치하는지 확인할 수 있기를 바랍니다. </p>

이로 인해 혼란이 더 커지나요? 가비지 수집가가 이에 만족할까요? </p>

P粉066224086
P粉066224086

모든 응답(2)
P粉792026467

사용 Object.fromEntries(ES10)

새로운 Object.fromEntries 메소드를 사용하는 로컬 및 불변 솔루션:

으아악

이 기능이 널리 사용 가능할 때까지 다음 polyfill사용자 정의를 사용할 수 있습니다.

으아악

한 가지 이점은 이 방법이 Object.entries의 반대이므로 이제 객체 표현과 배열 표현 간에 전환할 수 있다는 것입니다.

P粉258788831

제가 생각할 수 있는 가장 빠른 방법은 새 개체를 만드는 것입니다.

으아악

저는 v8의 현재 내부 작동 방식에 대해 명확하게 답변할 만큼 익숙하지 않습니다. 몇 년 전에 개발자가 개체에 대해 논의한 비디오를 보았는데, 기억이 맞다면 참조만 삭제하고 가비지 수집기가 이를 처리하도록 합니다. 하지만 그것은 몇 년 전의 일이므로 당시에는 사실이었다고 해도 지금은 반드시 그런 것은 아닙니다.

나중에 문제가 될까요? 무엇을 하고 있는지에 따라 다르지만 아마도 그렇지 않을 것입니다. 임시 개체를 만드는 것은 매우 일반적이므로 코드는 이를 처리하도록 최적화되어 있습니다. 그러나 모든 환경에는 한계가 있으며 이로 인해 문제가 발생할 수도 있습니다. 실제 데이터로 테스트해야 합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿