>웹 프론트엔드 >JS 튜토리얼 >imooc의 'JavaScript in a Simple Language'의 arraySimilar 함수

imooc의 'JavaScript in a Simple Language'의 arraySimilar 함수

PHP中文网
PHP中文网원래의
2018-05-19 16:38:321134검색

작업 index.html 파일에 arraysSimilar 함수를 작성하여 들어오는 두 배열이 유사한지 확인하세요. 특정 요구사항: 배열의 멤버는 동일한 유형이지만 순서는 다를 수 있습니다. 예를 들어, [1, true]는 [false, 2]와 유사합니다. 배열 길이는 일관됩니다. 유형 판단 범위는 문자열, 불리언, 숫자, 정의되지 않음, 널, 함수, 날짜, 창 등으로 구분되어야 합니다. 위의 사항이 모두 만족되면 "판정 결과: 합격"이 반환되고, 그렇지 않으면 "판정 결과: 실패"가 반환됩니다.

이것은 주로 "유사"판단을 요구하는 이상한 요청입니다.
첫 번째 본능은 배열을 직접 정렬한 다음 유형을 비교하는 것입니다. 하지만 JS의 크기 비교 특성상 이는 잘못된 것입니다.
그럼 여기서는 각 요소의 타입 이름의 약어를 취하여 (O(NlogN))을 근사화하고 사전순으로 정리한 뒤 오타로 사용하겠습니다. 전체 배열에 대해 대략 (O(N ))배열의 유사성을 비교할 수 있습니다.
두 번째로 주의할 점은 잘못된 매개변수에 대한 판단입니다. 처음에는 nullundefine을 판단하는 데 사용했습니다. , 매개변수 유형은 배열이어야 하므로 instanceof를 사용하여 판단하세요. == null来判断nullundefined的,但是要求参数类型为数组,所以用instanceof判断。
获取类型的替代方案是用Object.prototype.toString()유형을 가져오는 대신 Object.prototype.toString()을 사용하는 방법도 있습니다. 이 방법은 프로토타입 체인에 있는 객체의 클래스 이름을 정확하게 가져올 수 있지만 함수가 재정의될 수 있으므로 바람직하지 않습니다.

        /*          
        * param1 Array          
        * param2 Array         
        * return true or false         
        */function arraysSimilar(arr1, arr2) {
        // 获取单个元素的类型名简写,已经满足需求
        // 替代方案:考虑用Object.prototype.toString,但会被hack
        function getTypeNameS(item) {
        if (item === null)return 'nl';
        else if (item instanceof Date)
        return 'd';
        else if (item instanceof Window)
        return 'w';
        elsereturn (typeof item)[0];
        }
        // 获取整个数组排序后的typo
        function getArrayTypo(arr) {
        return arr.map(function (item) {
        return getTypeNameS(item);
        }).sort().join('');
        }
        // 可以判断==null,但由于要求类型为数组,那就用instanceof
        if (!(arr1 instanceof Array) || !(arr2 instanceof Array))
        return false;
        // 长度不等的情况,可以合并到typo比较中
        if (arr1.length != arr2.length)return false;
        // 对于typo使用内置的字符串比较
        return getArrayTypo(arr1) == getArrayTypo(arr2);
        }

이 기사는 Creative Commons License Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License에 따라 배포됩니다. 인용, 재인쇄 또는 파생할 수 있지만 BlackStorm에 대한 귀속 및 이 기사에 대한 링크는 유지되어야 합니다. 허가 없이 상업적인 목적으로 사용할 수 없습니다. 질문이나 승인 협상이 있는 경우 저에게 연락해 주세요.

위 내용은 imooc의 'JavaScript in a Simple Language'의 arraySimilar 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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