주어진 숫자가 닫힌 간격 (종점 포함)의 간격에 포함될 때를 찾고 해당 간격의 인덱스를보고하는 일반적인 방법을 찾고 있습니다. 나는 이것을 얻었다 :
sets (not a partition): [[0,8], [6,15], [14,25]]
findInSets : 7 -> [0, 1]
findInSets : 30 -> []
// findInSets :: number -> array-{indexes}
const isInRange = (x = 0, [a, b] = [0, 1]) => ([a, b] = [a, b].sort((a, b) => a > b)) && (x >= a && x <= b),
findInSets = (x = 0, sets = [
[0, 1]
]) => sets.map((subset, index) => (isInRange(x, subset)) ? index : -1).filter(index => index > -1);
console.log(
findInSets(7, [
[8, 0],
[6, 15],
[14, 25],
[99, 0]
])
);
일부 es6
마법, 그것은 (심지어) 깔끔한 될 수 있는가? es6
너무 재미 있어요!
여러분의 기여 덕분에 몇 가지 벤치 마크를 만들었습니다 (http://jsben.ch/#/dszDn) . Thomas (가장 빠름 + 기능적)와 Nina Scholz (확산 작업, 멋지지만 매우 비효율적 )를 기반으로 구축 된이 기능은 다음과 같습니다.
const findInIntervals = (x, intvArr) => intvArr
.filter(
(intv) => Math.min(...intv) <= x && x <= Math.max(...intv)
).map(intv => intvArr.indexOf(intv));
2017/04에 대한 참고 사항 : 속도를 찾고 있다면 확산 연산자를 피하고 Thomas 버전을 사용하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다