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