Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组传递给函数参数并从嵌套数组中获取值_Javascript_Arrays - Fatal编程技术网

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是一个奇数索引。