【问题标题】:How to use push in a java script loop?如何在 javascript 循环中使用 push?
【发布时间】:2020-04-18 21:06:10
【问题描述】:

我正在尝试编写代码来执行以下操作:

  1. 从右到左检查给定 16 位数组中的数字。
  2. 向左迭代时每隔一个数字加倍(第 16 位不加倍)。
  3. 如果加倍数字 > 9 ;然后从这个数字中减去 9 并将数字推送到新数组中。
  4. 如果新数组中这些新数字的总和等于 10 的乘数,则返回 true,否则返回 false。

我被困在第 3 步。下面是我的代码,我不确定为什么 push 函数不会创建一个新数组,有人可以帮忙吗?

let validateCred = (Arr) =>
    for (let i = 15; i >= 0; i--) {
        if (i % 2 === 0) {
            validateCred.push((Arr[i] * 2) % 9)
        } else {
            validateCred.push(Arr[i])
        };
    }
};

【问题讨论】:

  • validateCred 是一个函数,而不是一个数组
  • "... 并想出了一个包含这些新数字的新数组" 什么?

标签: javascript arrays for-loop push


【解决方案1】:

你的完整功能可能如下:

let validateCred = arr => {
  console.log("Original array:", "[" + arr .toString() + "]")
  let result = []
  for (let i = 15; i >= 0; i--) {
    if (i % 2 === 0) result.push((arr[i] * 2) % 9)
    else result.push(arr[i])
  }
  console.log("Modified array:", "[" + result.toString() + "]")
  return result.reduce((a, b) => a + b) % 10 === 0
}

console.log("Array valid:", validateCred([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]))

【讨论】:

  • 给定的数组之一如下所示,它应该返回 true,尽管当我将其放入手动写入数组的位置时,它使用上面的代码返回 false。有谁知道我错过了什么? const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6]
  • 为什么它应该返回true?! valid5 数组的结果是 [ 6, 3, 6, 0, 6, 7, 7, 3, 9, 8, 0, 8, 9, 6, 5, 8],总和是 91,它不能被 10 整除,所以 false 是预期的结果,为什么会混淆?!
【解决方案2】:
let validateCred = (Arr) =>{
for (let i = 15; i >= 0; i--) {
    if (i % 2 === 0) {
        Arr.push((Arr[i] * 2) % 9)
    } else {
        Arr.push(Arr[i])
    };
}
return Arr };

我想这就是你的意思。实际上,您需要在 .push 之后写入数组的名称。并且不要忘记返回您的数组。 这是有关更多详细信息的文档: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/push

【讨论】:

    【解决方案3】:

    我不确定为什么 push 函数不会创建一个新数组

    push 方法将元素添加到 现有 数组中。您需要在自己之前显式创建数组。

    function validateCred(Arr) {
        const newArr = [];
    //  ^^^^^^^^^^^^^^^^^^
        for (let i = 15; i >= 0; i--) {
            if (i % 2 === 0) {
                newArr.push((Arr[i] * 2) % 9)
            } else {
                newArr.push(Arr[i])
            };
        }
        … // use newArr
    }
    

    【讨论】:

    • 我插入了一个数组,看看它会返回什么,但它只返回未定义的。 console.log(validateCred(valid5)); valid5 是一个给定的数组,如下所示: const valid5 = [4, 5, 3, 9, 4, 0, 4, 9, 6, 7, 8, 6, 9, 6, 6, 6];
    • @BasakUlcay 任务的第 4 步仍然缺失,这就是我代码中的 的用途。你需要写出真正returns 的部分。
    【解决方案4】:
    validateCred = (Arr) => {
      let resArr = []; //resultant array to push to
    
      for (let i = Arr.length - 1; i >= 0; i--) {
        if (i % 2 === 0) { //every other (even indexed) item
          let doubled = Arr[i] * 2; //double every number
          if (doubled > 9) { //if doubled number is bigger than 9
            resArr.push(doubled - 9); //subtract 9 and push to resultant array
          }
        }
      }
    
      //You now have to iterate over the resultant array to find the sum
      let sum = 0;
      for (let j = 0; j < resArr.length; j++) {
        sum += resArr[j];
      }
    
      (sum % 10 === 0) ? return true : return false;
    }
    

    或者你可以在没有第二个数组的情况下完成整个程序,如果你只是在寻找你在问题中解释的所有其他数字的总和。它看起来像这样:

    validateCred = (Arr) => {
      let sum = 0;
    
      for (let i = Arr.length - 1; i >= 0; i--) {
        if (i % 2 === 0) { //every other (even indexed) item
          let doubled = Arr[i] * 2; //double every number
          if (doubled > 9) { //if doubled number is bigger than 9
            sum += (doubled - 9);
          }
        }
      }
    
      //check the sum
      (sum % 10 === 0) ? return true : return false;
    }
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多