2013-12-17 1 views
3
var a = [7,8,9,4,5,3,2,0,44]; 
[0,2,8].reduce(function(p,c,i,arr){return p && (a.indexOf(c)>-1) },true) 
//true 

[0,2,8,45].reduce(function(p,c,i,arr){return p && (a.indexOf(c)>-1) },true) 
//false 

[0,2,8,44].reduce(function(p,c,i,arr){return p && (a.indexOf(c)>-1) },true) 
//true 

잘 작동합니다!with 및 operator를 사용할 때 JavaScript/ECMAScript 5에서 처음으로 중지가 감소합니까?

처음으로 콜백 fn이 false를 반환 할 때 중지하는 것으로 충분합니까?

그 코드는 배열 'a'에 'arr'배열에 들어있는 모든 것이 들어 있는지 확인합니다.

+0

이것은 .reduce의 목적이 아닙니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every에서'.every '를 찾을 수도 있습니다. –

+0

오! 감사!!! 그러나 나의 감소는 일하고 있었다. 롤! –

답변

4

콜백 fn이 처음으로 false를 반환 할 때 중지하는 것으로 충분합니까?

번호 콜백의 반환 값은 다음 반복에서 첫 번째 매개 변수의 값이됩니다. 이 호출 예

, 각 반복에서

[0,2,8,45].reduce(function(p,c,i,arr){return p && (a.indexOf(c)>-1) },true) 

, 이들은 P, C의 값이고, I (도착 항상 [0,2,8,45]이다)

p  c i return 
true 0 0 true 
true 2 1 true 
true 8 2 true 
true 45 3 false 

마지막 반환 값은 reduce의 최종 반환 값입니다. 항상 배열의 모든 값을 반복합니다. 첫 번째 false에 중지 무언가를 원하는 경우에

~~~~~~~~~~~~~~~~~~~~~~~~~~

, every를 사용

[0,45,2].every(function(c,i){return a.indexOf(c)>-1 }) // false. Stops on 45 
2

No.
reduce() 함수는 콜백이 무엇인지 알지 못합니다. 항상 단락 중임을 전혀 모릅니다.

대신 every()으로 전화하십시오.

1

아니요, reduce 함수는 배열의 각 값에 대해 콜백을 호출합니다.

줄일

네 개의 인자를 수신하는 배열 구멍을 제외한, 어레이의 각 소자 본 번씩 콜백 함수를 실행한다 : (이전 콜백 전화 나 값)의 초기 값은 값 documentation on the reduce 방법과 현재 요소, 현재 인덱스 및 반복이 발생하는 배열을 반환합니다. 코드의

당신의 조각 매개 변수 모두 truthy 경우에만 && 운영자가 true로 평가되므로 "작동하는 것 같다". 먼저 false 값을 충족하는 경우, 누적 값 reduce 기능에 (첫 번째 인수) false이되고, 그 후 다시 true 할 수있는 방법은 없습니다 : false && <any value> 항상 false입니다.