Javascript JS detectNetwork编码练习

Javascript JS detectNetwork编码练习,javascript,Javascript,我在尝试解决以下JavaScript编码练习时遇到问题 编写函数detectNetwork。它应该接受字符串或字符串 数字作为其cardNumber参数,并应返回相应的 基于 提供信用卡数据 我努力想弄明白的是,如何在不硬编码cardData数组的每个行为的情况下编写此函数。我想有效地使用cardData数组作为函数的参数,但不知道如何使用 var-cardData=[{ 网络:'Visa',//发卡机构(网络) 前缀:['4'],//起始数字 长度:[13,16,19]//卡号的长度 },{

我在尝试解决以下JavaScript编码练习时遇到问题

编写函数detectNetwork。它应该接受字符串或字符串 数字作为其cardNumber参数,并应返回相应的 基于 提供信用卡数据

我努力想弄明白的是,如何在不硬编码cardData数组的每个行为的情况下编写此函数。我想有效地使用cardData数组作为函数的参数,但不知道如何使用

var-cardData=[{
网络:'Visa',//发卡机构(网络)
前缀:['4'],//起始数字
长度:[13,16,19]//卡号的长度
},{
网络:“万事达卡”,
前缀:['51','52','53','54','55'],
长度:[16]
},{
网络:“美国运通”,
前缀:['34','37'],
长度:[15]
},{
网络:“食客俱乐部”,
前缀:['38','39'],
长度:[14]
}];
功能检测网络(cardNumber,cardData){
//你的解决方案在这里
}
//范例
var网络=检测网络('343456789012345',cardData);

console.log(网络);//-->美国运通“
一种方法是迭代
cardData
数组,然后根据
cardNumber
测试
前缀
长度
键的值,确保我们转换为字符串或整数,正如问题所述,
cardNumber
可以是字符串或int

功能检测网络(cardNumber,cardData){
对于(设i=0,{length}=cardData;ilength==cardNumber.length)和&cardData[i].prefixes.some(prefix=>cardNumber.toString().startsWith(prefix.toString())){
返回cardData[i]。网络
}
}

}
这是我的解决方案,在这种特殊情况下适用)

功能检测网络(cardNumber,cardData){
//你的解决方案在这里
if(卡号类型==“编号”){
cardNumber=cardNumber.toString()
}
for(设i=0;i}
主要思想是首先检查卡的长度。如果我们在数组中找到长度相似的元素,我们将检查数组中前缀位于该对象内的元素。如果我们找到类似的前缀,则返回网络的名称

function detectNetwork(cardNumber, cardData) {
  var answer = '';
  var cardLength = cardNumber.length;
  var firstTwoDigits = cardNumber[0] + cardNumber[1];

  for (var i =0; i < cardData.length; i++){
    var cardObj = cardData[i];
    if (cardObj['lengths'] == cardLength){
      var arrOfPrefixes = cardObj['prefixes'];
      for (var j =0; j < arrOfPrefixes.length; j++){
        if (arrOfPrefixes[j] === firstTwoDigits){
          answer = cardObj['network'];
        }
      }
    }
  }
  return answer;
}
功能检测网络(cardNumber,cardData){
var-answer='';
var cardLength=cardNumber.length;
var firstTwoDigits=卡号[0]+卡号[1];
对于(变量i=0;i
我的方法是

  • 将卡号长度与每个发卡机构的长度进行比较
  • 如果存在匹配项,则找到目标前缀长度并将卡号切分以匹配它
  • 使用for循环将每个发卡机构的前缀与卡号的前缀进行比较
  • 如果存在匹配项,请更新颁发者
  • 功能检测网络(cardNumber,cardData){
    如果(卡号的类型=='number'){
    cardNumber=cardNumber.toString();
    }
    设cardLength=cardNumber.length;
    让发行人;
    对于(设x=0;xmaxLength){
    maxLength=arr[x]。长度;
    }
    }
    返回最大长度;
    }
    
    你好,乔恩!StackOverflow不是一个“为我做事”的网站。你试过什么?无论如何,看看数组对象上的过滤函数……我同意@frandroid的说法,如果人们给你完整的答案,它不会帮助你提高技能。然而,有时学生很难把所有的部分整合起来开始写解决方案。在这种情况下,对该方法的一些指导可能会有所帮助。
    function detectNetwork(cardNumber, cardData) {
      if(typeof cardNumber === 'number'){
        cardNumber = cardNumber.toString();
      }
    
      let cardLength = cardNumber.length;
      let issuer;
    
      for(let x = 0; x < cardData.length; x ++ ){
        let currentIssueObj = cardData[x];
        let currentIssueLengths = cardData[x].lengths;
        let currentIssuePrefixes = currentIssueObj.prefixes;
    
        if ( currentIssueLengths.includes(cardLength)) {
          let targetPrefixesLength = findMaxPrefixesLength(currentIssuePrefixes);
          let cardPrefixes = cardNumber.slice(0,targetPrefixesLength);
          for( let index = 0; index < currentIssuePrefixes.length; index ++ ){
            if( cardPrefixes === currentIssuePrefixes[index]) {
              issuer = currentIssueObj['issuer/network'];
              break;
              } 
          }
        }
      }
      return issuer;
    }
    
    //helper function 
    function findMaxPrefixesLength(arr){
      let maxLength = arr[0].length;
      for(let x = 1; x < arr.length; x ++ ){
        if (arr[x].length > maxLength){
          maxLength = arr[x].length;
        }
      }
      return maxLength;
    }