jQuery 맵과 각각


답변:


268

each메소드는 불변의 반복자입니다. 이 메소드는 반복자 map로 사용할 수 있지만 실제로는 제공된 배열을 조작하고 새 배열을 리턴합니다.

주목해야 할 또 다른 중요한 사항은 each함수가 원래 배열을 map반환 하고 함수는 새 배열을 반환한다는 것입니다. 맵 함수의 반환 값을 과도하게 사용하면 많은 메모리를 낭비 할 수 있습니다.

예를 들면 다음과 같습니다.

var items = [1,2,3,4];

$.each(items, function() {
  alert('this is ' + this);
});

var newItems = $.map(items, function(i) {
  return i + 1;
});
// newItems is [2,3,4,5]

map 함수를 사용하여 배열에서 항목을 제거 할 수도 있습니다. 예를 들면 다음과 같습니다.

var items = [0,1,2,3,4,5,6,7,8,9];

var itemsLessThanEqualFive = $.map(items, function(i) {
  // removes all items > 5
  if (i > 5) 
    return null;
  return i;
});
// itemsLessThanEqualFive = [0,1,2,3,4,5]

또한 함수 this에서이 매핑되지 않았습니다 map. 콜백에서 첫 번째 매개 변수를 제공해야합니다 (예 : i위에서 사용한 ). 아이러니하게도, 각 메소드에 사용 된 콜백 인수는 map 함수의 콜백 인수와 반대이므로주의하십시오.

map(arr, function(elem, index) {});
// versus 
each(arr, function(index, elem) {});

22
잘못된 맵은 제공된 배열을 변경하기위한 것이 아니라 입력 배열 및 매핑 함수를 기반으로 배열 을 반환하는 것입니다.
arul

4
@ Seb, 각 함수에 대한 내 링크를 읽으십시오. 두 번째 단락 jQuery.each 함수는 $ (). each ()와 동일하지 않습니다.
bendewey

4
또한 map () flattens는 배열을 반환
George Mauer

3
왜 $ .each를 사용합니까?
Dave Van den Eynde

6
@DaveVandenEynde 다음을 사용하여 루프의 중간을 깰 경우return false;
Vigneshwaran

93

1 : 콜백 함수에 대한 인수가 반대입니다.

.each()집, $.each()집과 .map()의 콜백 함수 소자 먼저 인덱스를 수행하고,

function (index, element) 

$.map()의 콜백은 동일한 인수를 갖지만 반대

function (element, index)

2 : .each(),, $.each()그리고 .map()뭔가 특별한 일을this

each()this현재 요소 를 가리키는 방식으로 함수를 호출합니다 . 대부분의 경우 콜백 함수에 두 개의 인수가 필요하지 않습니다.

function shout() { alert(this + '!') }

result = $.each(['lions', 'tigers', 'bears'], shout)

// result == ['lions', 'tigers', 'bears']

들어 변수 글로벌 윈도우 객체를 참조합니다.$.map()this

3 : map()콜백의 반환 값에 특별한 일을합니다.

map()각 요소에서 함수를 호출하고 결과를 새 배열에 저장하여 반환합니다. 일반적으로 콜백 함수에서 첫 번째 인수 만 사용하면됩니다.

function shout(el) { return el + '!' }

result = $.map(['lions', 'tigers', 'bears'], shout)

// result == ['lions!', 'tigers!', 'bears!']

function shout() { alert(this + '!') } result = $.each(['lions', 'tigers', 'bears'], shout)잘못된 결과를 생성하면 답변과 모순됩니다! jsfiddle.net/9zy2pLev
Hemant

@Hemant 방금 Chrome에서 바이올린을 테스트했는데 정상적으로 작동하는 것 같습니다. 이 세 가지 경고 대화 상자가 (! '사자', '! 호랑이', '! 곰') 그리고 마지막에result === ['lions', 'tigers', 'bears']
패트릭 McElhaney

22

each함수는 배열을 반복하면서 요소 당 한 번 제공된 함수를 호출 this하고 활성 요소로 설정 합니다. 이:

function countdown() {
    alert(this + "..");
}

$([5, 4, 3, 2, 1]).each(countdown);

경고합니다 5..다음 4..다음 3..다음 2..다음1..

반면에 Map은 배열을 가져오고 함수에 의해 각 요소가 변경된 새 배열을 반환합니다. 이:

function squared() {
    return this * this;
}

var s = $([5, 4, 3, 2, 1]).map(squared);

의 결과로 나타납니다 [25, 16, 9, 4, 1].


18

나는 이것으로 그것을 이해했다 :

function fun1() {
    return this + 1;
}
function fun2(el) {
    return el + 1;
}

var item = [5,4,3,2,1];

var newitem1 = $.each(item, fun1);
var newitem2 = $.map(item, fun2);

console.log(newitem1); // [5, 4, 3, 2, 1] 
console.log(newitem2); // [6, 5, 4, 3, 2] 

따라서 " each "함수는 원래 배열을 반환하고 " map "함수는 새 배열을 반환합니다


0
var intArray = [1, 2, 3, 4, 5];
//lets use each function
$.each(intArray, function(index, element) {
  if (element === 3) {
    return false;
  }
  console.log(element); // prints only 1,2. Breaks the loop as soon as it encountered number 3
});

//lets use map function
$.map(intArray, function(element, index) {
  if (element === 3) {
    return false;
  }
  console.log(element); // prints only 1,2,4,5. skip the number 3.
});

-1

Jquery.map은 배열에서 잘 수행되므로 배열 작업을 수행 할 때 더 의미가 있습니다.

Jquery.each는 선택기 항목을 반복 할 때 가장 잘 사용됩니다. map 함수가 선택기를 사용하지 않는다는 것이 입증되었습니다.

$(selector).each(...)

$.map(arr....)

보시다시피 map은 선택기와 함께 사용되지 않습니다.


2
불행히도 각 기능의 이름은 ... 처음이 아니고 누군가가 묻는 질문 중 마지막이 아닙니다.
Jeremy B.

8
map과 각각에는 selector-version과 util-version이 있습니다. $ .map 및 $ .each vs $ ( ""). map 및 $ ( ""). each.
Magnar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.