Javascript 函数未返回';中国银联;,不知道为什么
我的函数接收一个字符串卡号,并返回卡的名称。每一张卡似乎都有效,但中国支付一张。我没有定义,不知道为什么。大约有800个中国支付前缀。我迭代了这800个数字,将它们放入一个空数组,然后搜索其索引。如果它与数组中的一个前缀和两个长度中的一个匹配,则应返回名称,但不返回名称 任何帮助都将不胜感激。我相信有一种更有效的方法可以做到这一点,但这正是我的大脑去的地方。应该行得通,但不知道为什么不行Javascript 函数未返回';中国银联;,不知道为什么,javascript,arrays,indexof,Javascript,Arrays,Indexof,我的函数接收一个字符串卡号,并返回卡的名称。每一张卡似乎都有效,但中国支付一张。我没有定义,不知道为什么。大约有800个中国支付前缀。我迭代了这800个数字,将它们放入一个空数组,然后搜索其索引。如果它与数组中的一个前缀和两个长度中的一个匹配,则应返回名称,但不返回名称 任何帮助都将不胜感激。我相信有一种更有效的方法可以做到这一点,但这正是我的大脑去的地方。应该行得通,但不知道为什么不行 // loop through the 800 numbers and push to an empty
// 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,老实说,这并不是那么令人惊奇。如果你调试代码,你可以很容易地检测到这一点。现在你已经让其他人帮你做了,但是这应该是你编程习惯的一部分。明白了,谢谢。我会在调试方面做得更好。