>웹 프론트엔드 >JS 튜토리얼 >JavaScript 객체를 효율적으로 평면화 및 평면화 해제하려면 어떻게 해야 합니까?

JavaScript 객체를 효율적으로 평면화 및 평면화 해제하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-19 00:35:10175검색

How Can I Efficiently Flatten and Unflatten JavaScript Objects?

JavaScript 객체의 빠르고 효율적인 평면화 및 평면화 해제

중첩된 JavaScript 객체의 평면화 및 평면화 해제는 웹 개발에서 일반적인 작업이지만, 계산 집약적이어야 합니다. 이 문서에서는 평면화 및 평면화 해제 작업 모두에 대한 효율적인 구현을 살펴봅니다.

객체 평면화

다음 코드는 고도로 최적화된 평면화 구현을 제공합니다.

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 ? prop+"."+i : 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;
}

평평해지지 않음 객체

평탄화 해제의 경우 다음 구현은 향상된 성능을 보여줍니다.

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;
};

벤치마크 결과

이러한 구현은 평면화 성능을 크게 향상시킵니다. 그리고 평탄화되지 않은 작업. Opera 12.16에서는 평탄화가 약 2배 빠른 반면(~1900ms 대신 ~900ms), Chrome 29에서는 거의 같은 속도(~1600ms 대신 ~800ms)로 향상됩니다.

주의 :

속도에 초점을 맞춘 이러한 구현은 프로토타입에 취약합니다. 오염. 따라서 신뢰할 수 없는 개체에는 사용을 피하는 것이 중요합니다.

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

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