2017-12-01 6 views
1

사진이 3 장마다 표시되면 광고가 표시됩니다 (청구서를 지불해야 함). 예를 들어 시나리오에 따라서 광고가있는 갤러리의 사진 ID 계산

, 내 갤러리이 추천 사진과이 개 광고가있는 11 개 슬라이드, 것 :이 그림의 맨 윗줄에

gallery

은 제로입니다 내가 배열에 가지고있는 슬라이드의 기반 인덱스.

내가 지금 생각해 내야 할 것은 주어진 슬라이드 ID (하단 행의 숫자)에 해당하는 그림의 색인을 계산하는 수식입니다.

그래서 slideIndex === 2, 나는 slideIndex === 5, 나는 picIndex === 4이 필요하고 slideIndex === 8을 위해, 결과는 picIndex === 6 될 것 picIndex === 2해야합니다.

광고가 포함 된 슬라이드의 경우 마지막 픽처의 인덱스를 갖고 싶습니다. slideIndex === 3picIndex === 2에 대한 인덱스가 필요합니다.

난 그냥 for 루프를 사용하는 경우, 이미 작업 솔루션을 수행하지만 정말 절름발이 번거로운 것 같다

const adInterval = 3; // show an ad every 3 pics 
 

 
function calculatePicIndex(slideIndex) { 
 
    let picCount = 0; 
 
    let picIndex = -1; 
 
    for (let i = 0; i <= slideIndex; i++) { 
 
     if (++picCount > adInterval) { 
 
      picCount = 0; 
 
     } else { 
 
      picIndex++; 
 
     } 
 
    } 
 
    return picIndex; 
 
} 
 

 
for (let i = 0; i < 11; i++) { 
 
    console.log(`slide index: ${i} – pic index: ${calculatePicIndex(i)}`); 
 
}

내가 훨씬 더가 확신 우아한 수학적 수식을 사용하는 세련된 솔루션이므로 기본적으로 자바 스크립트 질문보다 수학 문제가 더 중요합니다.

위의 코드를 어떻게 리펙토링하여 피할 수 있습니까? 루프와 수학 공식을 통해 번호를 계산?

const picIndex = slideIndex - Math.floor(slideIndex/adInterval); 

를하지만 나에게 슬라이드 지수가 증가함에 따라 오프 더 있습니다 잘못된 값을 제공합니다

나는 이런 식으로 뭔가를 시도했다.

참조 JSFiddle는 : https://jsfiddle.net/pahund/1bobtkyp/3/

+0

당신의 광고 간격은 4가되어야하며 실수는 3이 아닙니다. 공식이 맞습니다. –

+0

고마워요! 하지만 adInterval에 1을 더하면 사진이있는 슬라이드의 올바른 picIndex 값을 얻을 수 있지만 광고 슬라이드의 경우 다음 슬라이드에서 사진 색인을 얻습니다. 반면에 색인의 색인이 필요합니다. 이전 슬라이드의 그림 –

답변

0

귀하의 공식은 거의 정확, 당신은 단지 그것을 해결하기 위해 슬라이드 인덱스 및 광고 간격에 1을 추가해야합니다 :

const adInterval = 3; 
 

 
for (let slideIndex = 0; slideIndex < 12; slideIndex++){ 
 
    let picIndex = slideIndex - Math.floor((slideIndex + 1)/(adInterval + 1)); 
 
    console.log(`slide index: ${slideIndex} – pic index: ${picIndex}`); 
 
}

+0

감사! 귀하의 코드를 수정하여 광고가있는 슬라이드에 올바른 그림 색인을 제공합니다. –

관련 문제