Javascript 函数未返回';中国银联;,不知道为什么

Javascript 函数未返回';中国银联;,不知道为什么,javascript,arrays,indexof,Javascript,Arrays,Indexof,我的函数接收一个字符串卡号,并返回卡的名称。每一张卡似乎都有效,但中国支付一张。我没有定义,不知道为什么。大约有800个中国支付前缀。我迭代了这800个数字,将它们放入一个空数组,然后搜索其索引。如果它与数组中的一个前缀和两个长度中的一个匹配,则应返回名称,但不返回名称 任何帮助都将不胜感激。我相信有一种更有效的方法可以做到这一点,但这正是我的大脑去的地方。应该行得通,但不知道为什么不行 // loop through the 800 numbers and push to an empty

我的函数接收一个字符串卡号,并返回卡的名称。每一张卡似乎都有效,但中国支付一张。我没有定义,不知道为什么。大约有800个中国支付前缀。我迭代了这800个数字,将它们放入一个空数组,然后搜索其索引。如果它与数组中的一个前缀和两个长度中的一个匹配,则应返回名称,但不返回名称

任何帮助都将不胜感激。我相信有一种更有效的方法可以做到这一点,但这正是我的大脑去的地方。应该行得通,但不知道为什么不行

  // loop through the 800 numbers and push to an empty array
  var chinaPayPrefix = [];
  for (let i = 622126; i <= 622925; i++){
    let chinaPayStringOne = i.toString();
    chinaPayPrefix.push(chinaPayStringOne);
  }
  for (let j = 6282; j <= 6288; j++){
    let chinaPayStringTwo = j.toString();
    chinaPayPrefix.push(chinaPayStringTwo);
  }
  // card lengths
  const discoverCardLength = [16,19];
  const maestroCardLength = [12,13,14,15,16,17,18,19];
  const visaCardLength = [13,16,19];
  const masterCardLength = 16;
  const dinersCardLength = 14;
  const americanExpressLength = 15;
  const chinaPayLength = [16,19];
  // card prefixes
  const discoverPrefix = ['6011','644','645','646','647','648','649','65'];
  const maestroPrefix = ['5018','5020','5038','6304'];
  const visaPrefix = ['4'];
  const mastercardPrefix = ['51','52','53','54','55'];
  const dinersPrefix = ['38', '39'];
  const americanExpressPrefix = ['34', '37'];
  // substrings of cardNumber
  let singleSplit = cardNumber.substring(0,1);
  let doubleSplit = cardNumber.substring(0,2);
  let tripleSplit = cardNumber.substring(0,3);
  let quadSplit = cardNumber.substring(0,4);
  let sextupleSplit = cardNumber.substring(0,7);
  // search if the applicable substring is present and length is correct
  if (dinersPrefix.indexOf(doubleSplit) > -1 && cardNumber.length === dinersCardLength) {
    return 'Diner\'s Club';
  } else if (americanExpressPrefix.indexOf(doubleSplit) > -1 && cardNumber.length === americanExpressLength) {
    return 'American Express';
  } else if (visaPrefix.indexOf(singleSplit) > -1 && visaCardLength.indexOf(cardNumber.length) > - 1){
    return 'Visa';
  } else if (mastercardPrefix.indexOf(doubleSplit) > -1 && cardNumber.length === masterCardLength){
    return 'MasterCard';
  } else if (discoverPrefix.indexOf(doubleSplit) > -1 || discoverPrefix.indexOf(tripleSplit) > -1 || discoverPrefix.indexOf(quadSplit) > -1 && discoverCardLength.indexOf(cardNumber.length) > - 1){
    return 'Discover';
  } else if (maestroPrefix.indexOf(quadSplit) > - 1 && maestroCardLength.indexOf(cardNumber.length) > - 1){
    return 'Maestro';
  } else if (chinaPayPrefix.indexOf(sextupleSplit) > - 1 && chinaPayLength.indexOf(cardNumber.length) > - 1){
    return 'China UnionPay';
  }else if (chinaPayPrefix.indexOf(quadSplit) > - 1 && chinaPayLength.indexOf(cardNumber.length) > - 1){
    return 'China UnionPay';
  }else if (chinaPayPrefix.indexOf(tripleSplit) > - 1 && chinaPayLength.indexOf(cardNumber.length) > - 1){
    return 'China UnionPay';
  }
};
//循环800个数字并推送到一个空数组
var chinaPayPrefix=[];
对于(设i=622126;i
应该是

let sextupleSplit = cardNumber.substring(0,6);
let sextupleSplit = cardNumber.substring(0,6)
仅取前6位数字


Quadspilt和tripleSplit是可以的

这行有6个字符:

应该是

let sextupleSplit = cardNumber.substring(0,6);
let sextupleSplit = cardNumber.substring(0,6)

您是否使用开发工具调试代码?请提供有问题的
cardname
的值。detectNetwork('6229008767564345'));应该返回中国支付卡,它不是…只是返回未定义。我只编写了几个月的程序,不太擅长chrome开发工具。今天我将对它进行一些研究。@crfriedt,老实说,这并不是那么令人惊奇。如果你调试代码,你可以很容易地检测到这一点。现在你已经让其他人帮你做了,但是这应该是你编程习惯的一部分。明白了,谢谢。我会在调试方面做得更好。