[javascript] 이 상황에서 .map ()은 무엇을합니까?

Chrome 콘솔을 사용하면 이것이 내 입력 및 출력입니다.

[0].map(Array);

[[0, 0, [0]]]; // output

여기서 무슨 일이 일어나고 있습니까?

편집하다

이것이 나를 궁금하게 만드는 이유는

[0].map(String);

돌아올 것이다

["0"];

그리고

["0", "0", "String"]



답변

.map()함수가 호출되는 Array()세 개의 인자이며 배열 요소의 값에 함수 0도, 그 요소의 인덱스 0, 전체 어레이에 대한 참조.

따라서 다음과 같습니다.

var a = [0];
var index = 0
Array(a[index], index, a);   // create array with three elements

그러면 반환 된 Array()배열이 .map()생성 되는 배열의 첫 번째 요소가 되므로 [[0, 0, [0]]]결과 에 추가 중첩 수준이 적용 됩니다.

당신의 편집에 대한 편집 : 당신이 말할 때 [0].map(String);의 그 결과 String()같은 같은 세 개의 인수로 호출되고는 String(a[index], index, a)있지만, String()반면에 기능을 제외한 모든 첫 번째 인수를 무시 Array()가 사용하는 모든 인수를 공급했다.


답변

첫째 , Array배열을 만드는 함수로 사용할 수 있습니다.

var arr = Array(1, 2, "Hello");

console.log(arr); // [1, 2, "Hello"]

둘째 , map콜백에 세 개의 매개 변수를 전달합니다. 요소, 배열의 색인 및 배열 자체입니다.

따라서 배열에 하나의 요소가 포함되어 있으므로 다음 줄은 다음과 같습니다.

[0].map(Array);

다음과 같습니다.

[Array(0, 0, [0])];     // the element 0 in the original array will be mapped into Array(0, 0, [0])


답변

질문을 업데이트 한 후. 다른 답변은 지도 에 대한 정보를 제공합니다.

배열과 문자열이 다른 이유에 답하려면 생성자를 찾습니다.

문자열 생성자는 1 개의 매개 변수 String (thing) 을 받아들이고 배열 new Array (element0, element1 [, … [, elementN]])


답변

이 전화

[0].map(Array);

다음과 같이 작성한 것과 동일한 결과를 제공합니다.

[0].map(function (value, index, array) {
    return Array(value, index, array);
})

Map 함수는 요소 값, 요소 인덱스 및 전체 배열의 세 가지 매개 변수로 Array 함수를 호출 합니다. 이 호출은 Array값 (number 0), 인덱스 (number 0), 전체 배열 ( [0])의 3 개 요소가있는 배열 을 반환합니다 .

그리고이 새 배열은 원래 요소 (number 0)를 새 요소 (3 개 요소의 배열)에 매핑했기 때문에 원래 Array에 래핑됩니다.

참고 : 다음과 같이 첫 번째 매개 변수 만 사용하는 데 익숙 할 수 있습니다.

array.map(function (a) { return a * a; });

또는 색인을 얻기 위해 두 개만 사용하면

array.map(function (item, index) { return "index=" + index + ", value=" + item; });

그러나 map콜백 함수에서 무시하면되는 3 개의 매개 변수 가 여전히 제공 된다는 점을 기억해야 합니다. 이것이 코드가 다음과 같은 이유이기도합니다.

[0].map(String);

보고

["0"]

String 함수는 첫 번째 매개 변수에만 관심이 있고 전달 된 다른 매개 변수는 무시 하기 때문 입니다. 전화하면

String(11, "Some", "other", "ignored", "parameters")

당신은 여전히 ​​얻을 것이다

"11"


답변