>웹 프론트엔드 >JS 튜토리얼 >중첩된 JavaScript 개체 평면화 및 평면화 해제를 최적화하려면 어떻게 해야 합니까?

중첩된 JavaScript 개체 평면화 및 평면화 해제를 최적화하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-29 08:30:11890검색

How Can I Optimize Flattening and Unflattening Nested JavaScript Objects?

중첩된 JavaScript 객체 평면화 해제 및 평면화: 최적화된 구현

복잡한 JavaScript 객체를 평면화 및 평면화 해제하는 작업에는 시간이 많이 걸릴 수 있습니다. 이 작업을 최적화하기 위한 포괄적인 분석은 다음과 같습니다.

과제: JavaScript 개체는 "."으로 평면화되어야 합니다. 객체 키의 구분 기호로 사용하고 배열의 경우 "[INDEX]"로 사용합니다.

초기 해결 방법: 제공된 코드는 문제를 해결하지만 상대적으로 느립니다.

더 빠른 구현(정규식 사용): Bergi는 정규식을 사용하여 훨씬 더 빠른 구현을 도입합니다. 평면화된 속성을 반복하고 이에 따라 중첩 구조를 생성하여 객체를 평면화 해제합니다.

가장 빠른 구현(비정규식): Bergi의 개념을 바탕으로 제공된 구현은 가장 빠른 비정규식을 제공합니다. 버전. 시작 부분의 정수나 이름 내의 마침표를 제외하고 키 이름에 대한 특정 규칙을 가정합니다.

평탄화 해제 성능 개선: AaditMShah는 String.split 대신 인라인 경로 구문 분석을 사용하여 평탄화 해제 성능을 향상합니다. 중첩 루프에서

최종 코드 (평탄화 해제):

Object.unflatten = function(data) {
    "use strict";
    if (Object(data) !== data || Array.isArray(data))
        return data;
    var regex = /\.?([^.\[\]]+)|\[(\d+)\]/g,
        resultholder = {};
    for (var p in data) {
        var cur = resultholder,
            prop = "",
            m;
        while (m = regex.exec(p)) {
            cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));
            prop = m[2] || m[1];
        }
        cur[prop] = data[p];
    }
    return resultholder[""] || resultholder;
};

최종 코드(평탄화):

Object.flatten = function(data) {
    var result = {};
    function recurse (cur, prop) {
        if (Object(cur) !== cur) {
            result[prop] = cur;
        } else if (Array.isArray(cur)) {
             for(var i=0, l=cur.length; i<l; i++)
                 recurse(cur[i], prop + "[" + i + "]");
            if (l == 0)
                result[prop] = [];
        } else {
            var isEmpty = true;
            for (var p in cur) {
                isEmpty = false;
                recurse(cur[p], prop ? prop+"."+p : p);
            }
            if (isEmpty &amp;&amp; prop)
                result[prop] = {};
        }
    }
    recurse(data, "");
    return result;
};

이러한 최적화는 중첩 평면화 및 평면화 해제 성능을 크게 향상시킵니다. 브라우저 호환성 요구 사항을 준수하면서 JavaScript 객체를 생성합니다.

위 내용은 중첩된 JavaScript 개체 평면화 및 평면화 해제를 최적화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.