简体   繁体   English

Javascript for 循环查找之前、相等、之间和之后的值?

[英]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 = 3 返回“之前”。 current = 4 should return 'key-two, current = 5 should return 'between', current = 7 should return 'key-two' current = 8 should return 'after'. current = 4 应该返回'key-two,current = 5 应该返回'between',current = 7 应该返回'key-two' current = 8 应该返回'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.将 current 设置为 7 返回 'key-two',将其设置为 8 或更大返回 'after' 将其设置为任何其他数字返回之间。

 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.您基本上不需要那个 for 循环。 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.keyOnekeyTwo放在循环之外。

 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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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