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 に答える