我有以下代码:
<script type="application/javascript">
$(document).ready(function () {
$("#market_value").on("change paste keyup", function() {
var market_value = parseInt($(this).val());
var data = [
{"percent":"10","market_value":"10000"},
{"percent":"20","market_value":"10001"},
{"percent":"25","market_value":"20000"}
];
for (var x in data) {
if(market_value >= parseInt(data[x].market_value)) {
console.log(percentage(market_value, data[x].percent));
}
};
});
function percentage(num, per)
{
return (num/100)*per;
}
});
</script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="form-control" id="market_value" name="market_value" value="">
我只需要一个简单的代码即可根据JSON数据列表计算market_value的百分比。
例如:
如果我输入8000,则结果必须为800(基于“百分比”字段的10%)。
如果我输入11000,则结果必须为2200(基于“百分比”字段的20%,因为它高于10001)
如果我输入50000,则结果必须为12500(基于“百分比”字段的25%,因为它高于20000)
如果我输入3000,结果必须为300(基于“百分比”字段的10%,因为它不超过10000)
我编写的代码以某种方式起作用,但是如果我输入的数字小于10000,则无任何显示。
这些不是固定值,数据(JSON)是动态的。
答案 0 :(得分:0)
正如@ Andreas @和@ John @正确指出的那样,循环将结束而无需任何操作:
for (var x in data) {
if(market_value >= parseInt(data[x].market_value)) { // never happens for <10000
console.log(percentage(market_value, data[x].percent));
}
假设我们给market_value = 5555
。
现在,随着for
的发展,您将进行以下比较:
if( 5555 >= 10000 ) { ... }
if( 5555 >= 10001 ) { ... }
if( 5555 >= 10002 ) { ... }
所有这些条件将给您false
。这是问题的核心。
答案 1 :(得分:0)
我设法解决了这个问题:
var data = [
{"percent":"10","market_value":"10000"},
{"percent":"25","market_value":"20000"},
{"percent":"20","market_value":"10001"}
];
sorted_data = sortByKeyDesc(data, "market_value");
for (var x in sorted_data) {
if(market_value >= parseInt(sorted_data[x].market_value)) {
console.log(percentage(market_value, sorted_data[x].percent));
break;
}else if(market_value){
console.log(percentage(market_value, sorted_data[x].percent));
}
function sortByKeyDesc(array, key) {
return array.sort(function (a, b) {
var x = a[key]; var y = b[key];
return ((x > y) ? -1 : ((x < y) ? 1 : 0));
});
}
因为json数据有时不能按该顺序排列(从最低到最高),所以首先我按最高market_value对其进行排序,然后运行百分比函数。如果值是1-10000,则应用10%(这是最后一行)
我不知道那有多脏,但效果很好。如果其他人有更好的主意,我将很高兴看到它。