基于值(整数,字符串)或(整数,浮点数)的混合返回数组的索引

Returning index of an array based on mixture of values(integer,string) or (integer,float)

您好,我正在尝试为百分比和整数数组中的数字查找索引。假设 arraynum = ['10%','250','20%','500'] 并且用户发送了一个值 15%,这个数字位于哪个范围内?我可以使用此代码找到整数的索引

    function test(number, ranges) {
  for (var i = 0; i < ranges.length; ++i) {
    if (number < ranges[i]) {
      return i;
    }
  }
}


var ranges = [2000, 4000, 6000, 999999];

console.log(test(1710, ranges));

现在我在数组中有整数和百分比值的混合,用户传递给此函数的数字可以是整数、小数或百分比如何在哪个索引中找到给定的数字是否存在?我应该将混合数组中的所有值转换为某种格式吗?这该怎么做?有人可以帮我吗?提前致谢。

使用parseFloat()获取字符串的浮点值。您可以使用它只解析到字符串中的第一个非数字字符的事实,以便忽略 %.

这是一个使用 ES6 中的 Array#findIndex 的实现。

function test(number, ranges) {
    var num = parseFloat(number);
    return ranges.findIndex(function(element) {
        return num === parseFloat(element);
    });
}

您可以像这样重构您的代码

arraynum = ['10%','250','20%','500'];
function test(value, arr) {
  return arr.indexOf(value.toString());
}

test("10%", arraynum); // 0
test("500", arraynum); // 3

使用一个输入检查混合值的条件有点棘手,您需要使用 JSON 数组。 请运行

var array_of_elements = [{

  "Price": 250,
  "Percentage": "10"
}, {
  "Price": 500,
  "Percentage": "25"
}, {
  "Price": 750,
  "Percentage": "50"
}, {
  "Price": 1000,
  "Percentage": "75"
}];

function test(number_or_percent, array) {

  for (var i = 0; i < array.length; ++i) {
    if (number_or_percent.charAt(number_or_percent.length - 1) == "%") {

      if (parseInt(array[i].Percentage) > parseInt(number_or_percent.slice(0, ((number_or_percent.length) - 1)))) {
        return i;
      }
    } else {
      if (array[i].Price > parseInt(number_or_percent)) {

        return i;
      }
    }
  }
}
console.log(test('100', array_of_elements));
console.log(test('30%', array_of_elements));

这是你想要的吗?