>source

저는 현재 (머신에서) 길이 목록을 가져 와서 타이밍 목록으로 변환해야하는 프로젝트를 진행 중입니다. 기계는 두 가지 다른 속도로 작동 할 수 있는데, 그 중 더 빠른 속도의 값 앞에는 'F'를 표시하고 느린 속도의 값 앞에는 'F'를 표시하지 않았습니다. 다음은 내 값 배열의 예입니다. [1.234,2.13,F1.23,5.5,F2.3] 이를 타이밍으로 변환하려면 앞에 F가없는 모든 요소를 ​​10으로 나누고 앞에 F가있는 모든 요소를 ​​100으로 나누고 F를 제거해야합니다. 예상되는 어레이 결과는 다음과 같아야합니다. [0.1234,0.213,0.0123,0.55,0.023]

지도 기능을 사용하는 방법을 알고 있는데, 다음과 같은 하나의 기능 만 적용하려는 경우 작동합니다. .map[x => x/10] . for 루프를 사용할 수 있다는 것도 알고 있지만,이 프로젝트를 사용하지 않는 다른 방법을 배우기 위해이 프로젝트를 시작했습니다. 시작 문자를 기반으로 다른 기능을 어떻게 적용 할 수 있는지 잘 모르겠지만 모든 요소에는 적용 할 수 없습니다. 아마도 여기서 작동 할 수있는 내가 놓친 명령이 있습니까?

  • 답변 # 1

    당신이할 수 있었다별도 사용 map 이 작업을 수행하기위한 콜백, 일반적인 솔루션은 단일 내에서 조건문을 분기하거나 사용하는 것입니다. map 대신 콜백.

    .map(x => x.charAt(0) === "F" ? +x.substring(1) : x / 10)
    
    

    또는 다른 곳에 정의 된 별도의 함수로 :

    .map(x => x.charAt(0) === "F" ? convertF(x) : convertNonF(x))
    
    

    두 개로하고 싶다면 map 대신 콜백을 사용하는 방법은 여러 가지가 있지만 위의 것보다 모두 더 복잡하고 거의 모든 것이 어쨌든 분기/조건을 포함합니다 (분기/조건을 사용하지 않는 것으로 생각할 수있는 유일한 방법은 다음과 같습니다.정말과도하게 복잡하며 중간 배열을 포함합니다. [index, value] 쌍, 두 filter 호출 및 기타 다양한 오버 헤드).

관련 자료

  • 이전 max - 공통 요소가있는 하위 목록에서 최대 값 찾기
  • 다음 tween - 두 가지 색상 사이에서 어떻게 svelte를 쉽게 할 수 있습니까?