简体   繁体   中英

Javascript for loop finding before, equal, between and after values?

I feel I'm missing something obvious. This is a simple example to illustrate my problem.

I expect current = 3 to return 'before'. current = 4 should return 'key-two, current = 5 should return 'between', current = 7 should return 'key-two' current = 8 should return 'after'.

This code doesn't work as expected. Setting current to 7 returns 'key-two', setting it to 8 or larger returns 'after' setting it to any other number returns between.

 let items = [] items['key-one'] = 4 items['key-two'] = 7 let current = 3 let results = '' for(let key in items) { let keyOne = '' let keyTwo = '' if (key === 'key-one') { keyOne = items[key] } if (key === 'key-two') { keyTwo = items[key] } if (current < keyOne) { results = 'before' } else if (current === items[key]) { results = key } else if (current > keyOne && current < keyTwo) { results = 'between' } else if (current > keyTwo) { results = 'after' } } document.write(results)

You essentially do not need that for loop. Try this code below

 let items = {}; items['key-one'] = 4 items['key-two'] = 7 let current = 4 let results = '' let keyOne = items['key-one']; let keyTwo = items['key-one']; if (current < keyOne) { results = 'before' } else if (current === keyOne) { results = "key-one"; }else if (current === keyTwo) { results = "key-two"; } else if (current > keyOne && current < keyTwo) { results = 'between' } else if (current > keyTwo) { results = 'after' } document.write(results)

You are effectively creating a new variable each time the loop is iterated. Put keyOne and keyTwo outside the loop.

 let items = [] items['key-one'] = 4 items['key-two'] = 7 let current = 3 let results = '' let keyOne = '' let keyTwo = '' for(let key in items) { if (key === 'key-one') { keyOne = items[key] } if (key === 'key-two') { keyTwo = items[key] } if (current < keyOne) { results = 'before' } else if (current === items[key]) { results = key } else if (current > keyOne && current < keyTwo) { results = 'between' } else if (current > keyTwo) { results = 'after' } } document.write(results)

That's enough to get your existing code workign, but there's a lot that could be improved. Consider this method..

 function positionInRange(point, low, high){ return point > high ? "after" : point < low ? "before" : point > low && point < high ? "between" : point == low ? "key-1" : "key-2" } var items = { "key-1": 4, "key-2": 7 } var results = positionInRange(3, items['key-1'], items['key-2']); document.write(results)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM