2014-02-23 2 views
0

배열에서 가장 큰 항목을 찾으려고합니다.TypeScript에서 array reduce를 호출하는 방법은 무엇입니까?

우아 - 정직, 단순, 깨끗하고 빠른 방법을 사용하여 해결할 수있을만큼 간단했다 - 배열의 반복 :

private GetMaxValue(data: Array<RealtimeDataPoint>): number { 
    if (data.length === 0) 
     return 0; 

    var maxValue = data[0].Value; 

    for (var i: number = 1; i < data.length; i++) { 
     if (data[i].Value > maxValue) 
      maxValue = data[i].Value; 
    } 

    return maxValue; 
} 

을하지만 그건 그런

을 냉각보다는 해결 아니에요

private GetMaxValue(data: Array<RealtimeDataPoint>): number { 
    var pt: RealtimeDataPoint = data.reduce(function (previousValue: RealtimeDataPoint, currentValue: RealtimeDataPoint, currentIndex: number, array: Array<RealtimeDataPoint>): RealtimeDataPoint { 
     if (currentValue.Value > previousValue.Value) 
      return currentValue; 
     else 
      return previousValue; 
    }); 

    if (pt != null) 
     return pt.Value; 
    else 
     return 0; 
} 

을 그리고 그것은 중대하고, 컴파일하고 모든 : 쉬운 방법을 사용하여 문제, 내가 .reduce을 사용하여 해결하려고하고 싶었다. 그게에 포장 마차 라인이 이후,

Object가이 작업 var pt: RealtimeDataPoint = data.reduce(...) 라인에 뭔가가 작동하지 않는 것을 나타냅니다 보인다

을 지원하지 않습니다 :하지만 런타임에 충돌

enter image description here

그리고 거기에는 지원되지 않는 .reduce 회원이 아닙니다.

그래서, 두 가지 질문 : 내 구문에 어떤 문제가 있는지

  • ?
  • 왜 TypeScript에서 구문에 이상이 있다는 것을 알지 못했습니까?

보너스 채팅

  • 인터넷 익스플로러 11
  • 크롬 32
+0

어떤 브라우저를 사용하고 있습니까? 다른 코드에서 코드를 실행하려고 시도 했습니까? – nemesv

답변

0

를 해결.

인터넷 익스플로러 11에서 오류 메시지는 다음과 같습니다

개체가이 작업을 지원하지 않습니다

크롬 32에서 오류 메시지는 다음과 같습니다

enter image description here

초기 값이없는 빈 배열의 줄이기

수정 사항은 간단합니다. 우아한 솔루션에서 뭔가를 빌려 :

private GetMaxValue(data: Array<RealtimeDataPoint>): number { 
    if (data.length === 0) 
     return 0; 

    var pt: RealtimeDataPoint = data.reduce(function (previousValue: RealtimeDataPoint, currentValue: RealtimeDataPoint, currentIndex: number, array: Array<RealtimeDataPoint>): RealtimeDataPoint { 
     if (currentValue.Value > previousValue.Value) 
      return currentValue; 
     else 
      return previousValue; 
    }); 

    if (pt != null) 
     return pt.Value; 
    else 
     return 0; 
} 

reduce 패턴의 상세를 감안할 때, 그리고 associated performance penalty, 난 내가 우아한 해결책을 고수 것 같아요.

하지만 적어도 TypeScript에는 reduce 구문의 예가 ​​있습니다.

참고 : 공개 된 코드입니다. 기여가 필요하지 않습니다.

+0

Downvote 때문에 : 1. 이것은 [] .reduce (function() {})가 런타임 오류이기 때문에 실제로 TypeScript 관련 사항이 아님을 알리기 위해 실제로 정말 긴 게시물입니다. 2. 왜 reduce 함수는 2 개의 추가 미사용 매개 변수를 가지고 있습니까? 3. 당신의 reduce 함수는 이미 문맥 적으로 타입 화되어있을 때 여분의 타입 주석을 가지고있는 이유는 무엇입니까? 4. 원본 게시물은 '데이터'에 무엇이 있는지 알려주지 않습니다. 5. 'Chrome 32'는 '보너스 잡담'에 있지만 오류 메시지가 해당 질문에 대한 답변입니까? –

+0

@RyanCavanaugh StackOverflow에서 말한 것처럼, 나는 연구 노력을 보여 주어야합니다. a) 코드에서 런타임 오류가 발생했습니다 (Typescript 컴파일러가 작성했습니다. 아마도 생성 된 코드에서 문제가 될 수 있습니다). b) 콜백 함수 서명은 필수 콜백 서명과 일치해야합니다. 타이핑하고, 여전히 실패했다. d) '데이터'의 데이터는 중요하지 않다. 첫 번째 알고리즘은 '데이터'가 작동 순서인지 알지 못하고 작동했습니다. 내가 시도한 브라우저로 질문을 업데이트했다. –

+0

@RyanCavanaugh 오, 그리고 요점까지, 우리가 심술 궂은 모든 것을 무시한다면 나는 그 질문을 게시했을 때 그 대답이 무엇인지 알지 못했습니다. 일단 솔루션을 얻은 후에는 솔루션을 쉽게 구현할 수 있습니다. 그래서 솔루션이 없으면 타이프립트와 관련이 있는지, 아니면 * 관련이 있는지 *를 알 수 없습니다. TypeScript에서 임의로 작동하지 않는 것들이 있습니다. [당신은 그들이 일할 것이라고 생각 하겠지만, 그들은 단지하지 않습니다] (http://stackoverflow.com/questions/12950681/typescript-for-in-statment). 나는 그 줄무늬 경우 중 하나가'감소 '라고 생각했다. –

관련 문제