가끔 다차원 배열을 생성하고 원하는 기본값으로 초기화해야 하는 경우가 있습니다.
일반적으로 먼저 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)를 참고하세요!