从对象数组中检查仪表

时间:2013-09-13 10:23:41

标签: javascript

我有一个像这样的对象数组

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');
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

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

    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;
        }
    }