2012-09-28 3 views
0

이 함수의 작성자가 이미 map 호출의 결과 인 reduce를 호출하는 이유를 이해하려고합니다. 백본 앱의 렌더링 기능입니다 (데모는 여기 http://fire-camp.heroku.com/). 변수 "메시지"는 사용자가 메시징 시스템에 입력하는 메시지의 모음을 나타냅니다. 제작자가지도를 호출하고지도의 결과, 즉 '데이터'를 줄이는 이유는 무엇입니까? 나는 reduce가 데이터 변수에 새로운 것을 추가하는 방법을 이해하지 못한다. 더 많은 정보가 필요하면 알려주세요.JavaScript : reduce and map

render: function() { 
    var data = messages.map(function(message) { return message.get('content') + 'n'}); 
    var result = data.reduce(function(memo,str) { return memo + str }, ''); 
    $("#chatHistory").text(result); 
    return this; 
    } 

매우 짧은 응용 프로그램의 전체 소스 코드는 여기에 있지만 필요하지 않을 것입니다.

+3

"map"함수는 배열을 반환합니다. "축소"는 배열을 스칼라로 축소합니다. 즉, 코드 작성자는 아마도 .join()을 사용 했어야합니다. – Pointy

+0

도움을 주셔서 감사합니다. 그러나, 누군가에게서 완전한 답을 얻기를 희망하면서, @pointy에 의한 코멘트는 부분적으로 만 질문에 답합니다. 왜 "왜"부분을 설명하지 않습니다. 예를 들어, 응용 프로그램에서 텍스트 (데이터)에 데이터 변수를 삽입하면 여전히 동일하게 작동하므로 왜 필요가 줄어 듭니까? 그 문제에 대해 가입 하시겠습니까? – BrainLikeADullPencil

+0

죄송합니다, 실수. 배열에 텍스트를 전달하면 작동하지 않습니다. – BrainLikeADullPencil

답변

1

@Pointy 언급했듯이 https://github.com/ryandotsmith/fire-camp, 저자 reduce 를 사용한 이유는 단일 문자열로 어레이를 연결하는 (또는 문자열 에게 그것을 감소). 그렇지만 @Pointy에도 reduce을 사용하는 이유는이 경우별로 좋지 않습니다.

GitHub의 코드에서 이 더 좋은 몇 가지 대안이 있습니다. 코드가 Backbone.js 사용하는 것을 고려하고 라인이의 함께 뭔가를 읽을 경우 Backbone.Collection이 코드가 messages 변수 포인트는 더 명확 것 :

render: function() { 
    var result = messages.pluck('content').join('\n') 
    $("#chatHistory").text(result); 
    return this; 
} 

의 배열을 시청에 reduce 사용 문자열은 잔인하며 은 코드의 의도를 모호하게 만듭니다. map과 함께 Backbone.Collection을 사용하면 특정 모델에서 특정 속성을 뽑아 내고 코드의 의도가 다소 어둡게 처리됩니다.

관련 문제