>  기사  >  웹 프론트엔드  >  흥미로운 JavaScript 질문: 다차원 배열 초기화

흥미로운 JavaScript 질문: 다차원 배열 초기화

黄舟
黄舟원래의
2017-01-22 15:02:222179검색

가끔 다차원 배열을 생성하고 원하는 기본값으로 초기화해야 하는 경우가 있습니다.

일반적으로 먼저 1차원 배열을 만든 다음 이 1차원 배열 내에서 2차원 배열을 참조하고... N차원 배열까지 그 내용을 기본값으로 채웁니다. .

이 과정에서 많은 루프를 작성해야 하는데 이는 다소 번거로울 수 있습니다. 따라서 다차원 배열 초기화를 위한 도구 메서드를 작성하여 호출할 수 있는 방법을 생각해 보는 것은 어떨까요? 편리하게?

다음과 같은 메소드가 필요한 것 같습니다.

dim( d1 [,d2 [,d3 [... ]]], value )

매개변수 목록을 보면 d1, d2, d3은 각 차원 배열이 참조하는 요소 수를 나타내고 value는 초기 값을 나타냅니다. 값.

이 값은 함수일 수 있습니다. 이 경우 함수의 반환 값을 참조합니다.

몇 가지 예를 살펴보겠습니다.

dim( 3,3,"x" ) // => [['x','x','x'],['x','x','x'],['x','x','x']]

여기서 1비트 배열은 3개의 2차원 배열을 의미하고, 각 2차원 배열은 3개의 초기화 값을 의미합니다.' x'

dim( 2,2,2,0 ) // => [[[0,0],[0,0]],[[0,0],[0,0]]]

여기의 규칙은 위와 동일합니다

dim( 3, true ) // => [true,true,true]

여기의 1차원 배열은 3개의 부울 값 true를 나타냅니다

var xxx = function(){ return "xX" }
dim( 2,5,xxx ) // => [['xX','xX','xX','xX','xX'],['xX','xX','xX','xX','xX']]

여기서 초기화 값은 함수이므로 채우고 반환되는 결과는

입니다. 이 질문은 N차원 배열과 관련되어 있으므로 재귀가 필요합니다.

배열을 구성하고 깊이 탐색하는 과정입니다.

저의 방법에서는 deep이라는 매개변수를 사용하여 현재 깊이를 기록합니다.

예를 들어, 희미한(2,2,2,0), 현재 깊이가 0이면 첫 번째 매개변수 2에 해당하며, 이는 2개의 배열이 생성됨을 나타냅니다. 즉, 의 깊이와 매개변수 목록의 인덱스는 일관되며 구성할 배열 또는 값의 수를 나타냅니다.

deep이 가장 깊은 수준에 도달하면 초기화 할당을 수행할 수 있으며 for 루프가 현재 배열을 채운다는 의미입니다.

function dim(){  
    var len = arguments.length;  
    var args = Array.prototype.slice.call(arguments,0,len-1);  
    var content = arguments[len-1];  
    var result = [];  
      
    var traverse = function foo(from,deep){  
        var arg = args[deep];  
        if(deep < args.length - 1){  
            for(var i=0;i<arg;i++){  
                var array = [];  
                from.push(array);  
                foo(array,deep+1);  
            }  
        }  
        else{  
            for(var i=0;i<arg;i++){  
                if(typeof content === "function"){  
                    from.push(content());  
                }  
                else{  
                    from.push(content);  
                }  
            }  
        }  
    };  
    traverse(result,0);  
    return result;  
}

위는 흥미로운 JavaScript 질문입니다. 다차원 배열 초기화 내용에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!

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