Javascript 将数组传递给函数参数并从嵌套数组中获取值
我在练习信用卡检查时被卡住了。 我的代码:Javascript 将数组传递给函数参数并从嵌套数组中获取值,javascript,arrays,Javascript,Arrays,我在练习信用卡检查时被卡住了。 我的代码: // All valid credit card numbers const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8] const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9] const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6] const
// All valid credit card numbers
const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9]
const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6]
const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5]
const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6]
// All invalid credit card numbers
const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5]
const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3]
const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4]
const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5]
const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4]
// Can be either valid or invalid
const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4]
const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9]
const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3]
const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3]
const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3]
// An array of all the arrays above
const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4, mystery5]
// Add your functions below:
const validateCred = (array)=> {
let tempArrSub = []; //Holds values of the 9 subtracted from doubled elements bigger than 9
let tempArr = array; //Copies the values of the array passed into parameters
tempArr.pop();
tempArr.reverse();
for (let i = tempArr.length-1; i >=0; i-=2){ //Doubles every two elements from right to left
tempArr[i] *= 2;
}
for (let k = 0; k < tempArr.length; k++) { //Subtract 9 from every second element (right to left) if bigger than 9
if (tempArr[k] > 9){
tempArrSub.push(tempArr[k] - 9);
}
else {
tempArrSub.push(tempArr[k]);
}
}
let tempArrSum = 0;
for (let m = 0; m < tempArrSub.length; m++){ //Calculates the sum of all elements in the array
tempArrSum += tempArrSub[m];
}
tempArrSum += array.pop(); //Adds the last digit of initial array to the sum
if (tempArrSum % 10 === 0) { //Returns true if the sum is divisible by 10
return true;
}
else {
return false;
}
} //End Of Function
const findInvalidCards = (nestedArray) => {
let invalidCards = [];
let validCards = [];
for (let a = 0; a < nestedArray.length; a++){
if ( validateCred(nestedArray[a]) == true ) {
validCards.push(nestedArray[a]);
}
else {
invalidCards.push(nestedArray[a]);
}
}
console.log("Invalid cards: \n" + invalidCards);
console.log("Valid cards: \n" + validCards);
}
//所有有效的信用卡号
常数valid1=[4,5,3,9,6,7,7,9,0,8,0,1,6,8,0,8]
常数valid2=[5,5,3,5,7,6,6,7,6,8,7,5,1,4,3,9]
常数valid3=[3,7,1,6,1,2,0,1,9,9,8,5,2,3,6]
常数valid4=[6,0,1,1,1,4,4,3,4,0,6,8,2,9,0,5]
常量valid5=[4、5、3、9、4、0、4、9、6、7、8、6、9、6、6]
//所有无效的信用卡号
const invalid1=[4,5,3,2,7,7,8,7,7,1,0,9,1,7,9,5]
const invalid2=[5,7,9,5,5,9,3,3,9,2,1,3,4,6,4,3]
const invalid3=[3,7,5,7,9,6,0,8,4,4,5,9,9,1,4]
const invalid4=[6,0,1,1,1,2,7,9,6,1,7,7,7,9,3,5]
const invalid5=[5,3,8,2,0,1,9,7,7,2,8,8,3,8,5,4]
//可以是有效的,也可以是无效的
常数mystery1=[3,4,4,8,0,1,9,6,8,3,0,5,4,1,4]
常量mystery2=[5,4,6,6,1,0,0,8,6,1,6,2,0,2,3,9]
常量mystery3=[6,0,1,1,3,7,0,2,0,9,6,2,6,5,6,2,0,3]
常量mystery4=[4,9,2,9,8,7,7,1,6,9,2,1,7,0,9,3]
常量mystery5=[4,9,1,3,5,4,0,4,6,3,0,7,2,5,2,3]
//上面所有数组的数组
常量批=[valid1,valid2,valid3,valid4,valid5,invalid1,invalid2,invalid3,invalid4,invalid5,mystery1,mystery2,mystery3,mystery4,mystery5]
//在下面添加您的功能:
const validated=(数组)=>{
让tempArrSub=[];//保存从大于9的加倍元素中减去的9的值
让tempArr=array;//将数组的值复制到参数中
tempArr.pop();
tempArr.reverse();
对于(设i=tempArr.length-1;i>=0;i-=2){//从右到左每两个元素加倍一次
tempArr[i]*=2;
}
对于(k=0;k9){
tempArrSub.push(tempArr[k]-9);
}
否则{
tempArr sub.push(tempArr[k]);
}
}
设tempArrSum=0;
for(设m=0;m{
让无效卡片=[];
设validCards=[];
for(设a=0;a
我逐个检查了作为validateCred()函数参数传递的所有数组。它的工作和返回正确或错误的每一张信用卡
为了使这个过程自动化,我希望findInvalidCards()通过调用其内部的validateCred()函数并返回每张卡的布尔值来查找有效或无效的卡
我被卡住了。因为第一张牌返回true,其余牌返回false。我已经玩了一整天的代码,但我无法前进。我依靠你的帮助。提前谢谢我想你的问题是这一行:
let tempArr = array; //Copies the values of the array passed into parameters
根据您的注释,您希望复制数组,但仅将其分配给另一个变量不会复制它。为了复制这样的东西:
let copy = array.slice(0);
/* or (will not work for large arrays) */
let copy = [...array];
我不知道这对你是否有帮助。但是我用一种最佳的方式重写了你的代码
// All valid credit card numbers
const valid1 = [4, 5, 3, 9, 6, 7, 7, 9, 0, 8, 0, 1, 6, 8, 0, 8]
const valid2 = [5, 5, 3, 5, 7, 6, 6, 7, 6, 8, 7, 5, 1, 4, 3, 9]
const valid3 = [3, 7, 1, 6, 1, 2, 0, 1, 9, 9, 8, 5, 2, 3, 6]
const valid4 = [6, 0, 1, 1, 1, 4, 4, 3, 4, 0, 6, 8, 2, 9, 0, 5]
const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6]
// All invalid credit card numbers
const invalid1 = [4, 5, 3, 2, 7, 7, 8, 7, 7, 1, 0, 9, 1, 7, 9, 5]
const invalid2 = [5, 7, 9, 5, 5, 9, 3, 3, 9, 2, 1, 3, 4, 6, 4, 3]
const invalid3 = [3, 7, 5, 7, 9, 6, 0, 8, 4, 4, 5, 9, 9, 1, 4]
const invalid4 = [6, 0, 1, 1, 1, 2, 7, 9, 6, 1, 7, 7, 7, 9, 3, 5]
const invalid5 = [5, 3, 8, 2, 0, 1, 9, 7, 7, 2, 8, 8, 3, 8, 5, 4]
// Can be either valid or invalid
const mystery1 = [3, 4, 4, 8, 0, 1, 9, 6, 8, 3, 0, 5, 4, 1, 4]
const mystery2 = [5, 4, 6, 6, 1, 0, 0, 8, 6, 1, 6, 2, 0, 2, 3, 9]
const mystery3 = [6, 0, 1, 1, 3, 7, 7, 0, 2, 0, 9, 6, 2, 6, 5, 6, 2, 0, 3]
const mystery4 = [4, 9, 2, 9, 8, 7, 7, 1, 6, 9, 2, 1, 7, 0, 9, 3]
const mystery5 = [4, 9, 1, 3, 5, 4, 0, 4, 6, 3, 0, 7, 2, 5, 2, 3]
// An array of all the arrays above
const batch = [valid1, valid2, valid3, valid4, valid5, invalid1, invalid2, invalid3, invalid4, invalid5, mystery1, mystery2, mystery3, mystery4, mystery5];
isValidCard = (array) => {
let copy = [...array];
const last = copy.pop();
copy.reverse();
copy = copy.map((dig, i) => ((i % 2 === 0 ? dig * 2 : dig)));
copy = copy.map(dig => (dig > 9 ? dig - 9 : dig));
const sum = copy.reduce((acc, curr) => acc + curr);
return ((sum + last) % 10 === 0);
}
findInvalidCards = (array) => {
const validList = [];
const invalidList = [];
array.forEach(card => {
if (isValidCard(card)) {
validList.push(card);
} else {
invalidList.push(card);
}
});
console.log('valid cards', validList);
console.log('invalid cards', invalidList);
}
findInvalidCards(batch);
“
tempArr=array;//复制值”
“这只是使两个变量引用同一个数组对象,而不是副本。所以tempArr.pop()代码>,以及更下面的array.pop()
正在修改原始的arraycopy=copy.map((dig,i)=>((i%2==0?dig*2:dig));你用这种方法把偶数乘以2吗?不!索引从0开始。所以索引号2是一个奇数索引。