2016-10-12 7 views
1

방금 ​​방금 reduce의 기능을 학습했습니다. 매우 유용했습니다. 최근에 필자는 일련의 문자열을 사용하여 자동으로 일련의 결과물을 만들어 냈습니다. 그러나`reduce` 메소드의 고급 사용

miscString = 
"\nYou have a dog. 
\nYou have a cat. 
\nYou have a hamster." 

은 배열의 첫 번째 반복에 대한 함수의 적용되지 않습니다 감소 : 같은으로

miscArray = ["dog", "cat", "hamster"] 

: 내가 좋아하는 뭔가를 켜려고합니다. 나는이 같은 일을 그만 둘

function outputString(x,y){ 
    return x+"\nYou have a "+y+"."; 
} 

miscArray = ["dog", "cat", "hamster"] 

alert(miscArray.reduce(outputString)); 

: 내 코드는 다음과 같이 보이는 경우 해결 방법으로

"dog 
\nYou have a cat. 
\nYou have a hamster." 

을, 난 그렇게처럼 내 배열의 시작에 빈 문자열을 사용하고 : miscArrray = ["","dog", "cat", "hamster"]. 그러나 해결 방법을 사용한다는 것은 내가 일을 올바르게하는 방법을 모른다는 것을 의미합니다. 난 단지 reduce() 메서드의 내 자신의 변종을 만드는 것을 고려하고 있지만, 올바른/더 좋은 방법이 있다면 그것을 할 수 있습니다. 나는 오히려 그렇게 할 것입니다.

답변

4

확실히있다 :

당신은 누적에 대한 초기 값을 지정해야합니다. 귀하의 경우 그것은 '' (빈 문자열)입니다. 함께 두 번째 매개 변수로 첫 번째 배열 항목 어큐뮬레이터의 초기 값은 첫 번째 반복에 대한 첫 번째 인수로서 건네 설정

function outputString(x,y){ 
    return x+"\nYou have a "+y+"."; 
} 

miscArray = ["dog", "cat", "hamster"] 

alert(miscArray.reduce(outputString, '')); 

, 등등.

실제로 좋은 습관입니다 항상은 누적기를 명시 적으로 설정합니다. 표현식을 입력하는 것이 훨씬 명확하고 명확 해지기 때문입니다.

+0

완벽합니다. 감사! 나는 확실히 그것을 미래에 사용할 것이다. – Ucenna

3

이 경우 reduce을 사용하지 마십시오. 다음을 사용하십시오.

miscArray.map(x => "\nYou have a "+ x +".").join("") 
+2

기술적으로 말해서 join은 reduce 연산입니다. – Phil

+2

@Phil'map' 또한 reduce 연산입니다 :-)'Array.prototype.reduce'는 다른 모든 배열 연산을 표현하기에 충분합니다. – zerkms

+1

당신은'.join ("" ")'을 의미 했습니까? '.join()'은 .join (",")' – Bergi