사진이 3 장마다 표시되면 광고가 표시됩니다 (청구서를 지불해야 함). 예를 들어 시나리오에 따라서 광고가있는 갤러리의 사진 ID 계산
, 내 갤러리이 추천 사진과이 개 광고가있는 11 개 슬라이드, 것 :이 그림의 맨 윗줄에은 제로입니다 내가 배열에 가지고있는 슬라이드의 기반 인덱스.
내가 지금 생각해 내야 할 것은 주어진 슬라이드 ID (하단 행의 숫자)에 해당하는 그림의 색인을 계산하는 수식입니다.
그래서slideIndex === 2
, 나는
slideIndex === 5
, 나는
picIndex === 4
이 필요하고
slideIndex === 8
을 위해, 결과는
picIndex === 6
될 것
picIndex === 2
해야합니다.
광고가 포함 된 슬라이드의 경우 마지막 픽처의 인덱스를 갖고 싶습니다. slideIndex === 3
→ picIndex === 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/
당신의 광고 간격은 4가되어야하며 실수는 3이 아닙니다. 공식이 맞습니다. –
고마워요! 하지만 adInterval에 1을 더하면 사진이있는 슬라이드의 올바른 picIndex 값을 얻을 수 있지만 광고 슬라이드의 경우 다음 슬라이드에서 사진 색인을 얻습니다. 반면에 색인의 색인이 필요합니다. 이전 슬라이드의 그림 –