JavaScript计算错误超过100

Top*_*Bot 1 javascript

我有一个函数,它检查数组(数量)与数组 quantity range: price

var data = {
  "1 - 4": " $4.25 ",
  "10 - 24": " $3.25 ",
  "25 - 49": " $3.04 ",
  "5 - 9": " $3.51 ",
  "50+": " $2.84 "
}

function get_price(arr, val) {
  var price = Object.keys(arr).reduce((a, c) => {
    var s = c.trim();
    if (/\d+\-\d+/.test(s)) {
      var range = s.split("-");
      if (val >= parseInt(range[0]) && val <= parseInt(range[1])) {
        a = arr[c];
      }
    } else {
      s = s.replace(/\D/g, "");
      if (val >= s) {
        a = arr[c];
      }
    }
    return a;
  }, 0);
  return price;
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果一个数字大于50但小于100则正确计算,超过100则无法看到50+并使用该价格.

任何帮助表示赞赏!

Iva*_*van 5

使用字符串作为对象的键,可以正常工作:

const range = {
  "1-4": " $4.25 ",
  "10-24": " $3.25 ",
  "25-49": " $3.04 ",
  "5-9": " $3.51 ",
  "50+": " $2.84 "
}
Run Code Online (Sandbox Code Playgroud)

有关物业存取的更多信息:

在此代码中,属性必须是有效的JavaScript标识符,即一系列字母数字字符,还包括不能以数字开头的下划线("_")和美元符号("$").例如,object.$1有效,而object.1不是.

- MDN Web文档

演示:

function get_price(arr, val) {
  var price = Object.keys(arr).reduce((a, c) => {
    var s = c.trim();
    if (/\d+\-\d+/.test(s)) {
      var range = s.split("-");
      if (val >= parseInt(range[0]) && val <= parseInt(range[1])) {
        a = arr[c];
      }
    } else {
      s = s.replace(/\D/g, "");
      if (val >= s) {
        a = arr[c];
      }
    }
    return a;
  }, 0);
  return price;
}

const range = {
  "1-4": " $4.25 ",
  "10-24": " $3.25 ",
  "25-49": " $3.04 ",
  "5-9": " $3.51 ",
  "50+": " $2.84 "
}

console.log(get_price(range, 60))
console.log(get_price(range, 500))
Run Code Online (Sandbox Code Playgroud)