1

我有一个这样的对象数组

var json = [{"price":"30.00","meter":"70"},{"price":"20.00","meter":"130"},{"price":"10.00","meter":"170"}];

如何检查这之间的数量并计算价格。我写了循环,但它不能正常工作。

var mQty = 2.52;
var jCnt = json.length;
//alert(jCnt);
for (var j = 0; j < jCnt - 1; j++) {
    nextj = j + 1;
    //alert(nextj;
    first = json[j].meter;
    if (json[nextj].meter != '') {
        second = json[nextj].meter - 1;
    } else {
        second = '';
    }
    if (mQty >= first && mQty <= second) {
        //bettween meter from json obj
        alert('if condition');
        alert(json[j].price);
    } else {
        //under 70 meter
        alert('else condition');
        alert('40.00');
    }
}
4

1 回答 1

1

我想我现在明白了这个问题。你的价格是每米的价格(我猜),订购的东西越多,每米的价格就越便宜。您想找到给定长度的匹配价格。

由于您的价格按升序排序,因此逻辑非常简单:

  1. 如果数量/长度小于第一个条目所需的数量/长度,则使用默认价格。
  2. 否则使用数量/长度相等或更小的最后一个元素的价格。

例子:

var price;
if (qty < prices[0].meter) {
    price = defaultPrice;
}
else {
    for (var i = 1; i <= prices.length; i++) {
       price = prices[i - 1].price;
       if (prices[i] && prices[i].meter > qty) {
           break;
       }
    }
}

如果将默认价格作为第一个元素添加到数组中:

var prices = [{price: defaultPrice, meter: 0}, ...];

那么你可以省略整个if...else语句:

var price;
for (var i = 1; i <= prices.length; i++) {
    price = prices[i - 1].price;
    if (prices[i] && prices[i].meter > qty) {
        break;
    }
}
于 2013-09-13T13:56:56.747 回答