javascript - 从对象数组中检查仪表

标签 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. 如果数量/长度小于第一个条目所需的数量/长度,则使用默认价格。
  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;
    }
}

关于javascript - 从对象数组中检查仪表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18784003/

相关文章:

javascript - 检查对象数组中的重复条目并创建一个新条目

javascript - 如何使用/创建 MANIFEST、处理 appCache 事件/错误以及使用 swapCache

javascript - 如何从对象访问默认类属性?

javascript - React 中相同样式组件的不同背景图像

javascript - 更新 select2 组件的选项 - vue js

javascript - Handlebars.js - 循环一个不包括第一个元素的数组?

javascript - 如何将 Angular2 Http 服务注入(inject) es6/7 类?

javascript - 从 iframe 中打开链接

javascript - 具有错误输入 val() 的 keyup 事件

javascript - AngularJS 如何区分这两个属性?