【问题标题】:function that squares the values in an array对数组中的值进行平方的函数
【发布时间】:2016-10-04 21:51:08
【问题描述】:

我被指示创建一个函数,该函数从数组中获取值并对每个值求平方,并将数字记录到控制台。我尝试了两种方法,目前都没有:

第一次尝试:

var numbers = [2, 7, 13, 24];

function squareAll(numbers) {
  var newArray = [];
  for(i = 0; i < numbers.length; i++) {
    numbers = newArray.push(Math.pow(numbers[i], 2))
    return newArray;
  }
  console.log(squareAll(numbers));
}

第二次尝试:

var numbers = [2, 7, 9, 25];
var newArray = [];
var squareAll = function(numbers) {
  for(var i = 0; i < numbers.length; i++){
    newArray = [];
    newArray.push(squareAll[i] * squareAll[i])
  };
  return newArray;
};
console.log(squareAll(newArray));

当我在 javascript 控制台中尝试这两个代码时,都返回未定义并且不会给我一个特定的错误,所以我不确定这里有什么问题。任何解释将不胜感激!

【问题讨论】:

  • 函数肯定不会返回undefined,因为newArray(由函数返回)的值不是undefined。但是,最简单的解决方案是numbers.map(x =&gt; x * x)
  • 你不想在循环之后返回,而不是里面吗?
  • 第一次尝试:在您完成数组处理之前,您是returning。为什么将numbers 分配给newArray.push(...)push 将项目添加到数组中,此处无需使用返回值。最后,您将调用squareAll inside of squareAll。这将永远运行。
  • [2, 7, 9, 25].map(a=&gt;console.log(a**2))
  • 第二次尝试如此接近。在最后一行发送numbers squareAll 函数而不是空数组...和newArray.push(numbers[i] * numbers[i]) ... Err 实际上也许您在第一次尝试时更接近。

标签: javascript arrays function loops


【解决方案1】:

在您的第一次尝试中,您将推送方法分配给变量,这是一种不好的做法。其次,您在循环的第一个循环之后立即返回函数,因此您在遍历数组的所有元素之前停止循环。

在第二次尝试中,由于循环内的newArray = [];,您基本上是在循环的每个循环之后清除数组。因此,在每个循环中,您都在 newArray 中放置一个元素,然后您告诉循环清除 newArray。循环将变得无限,因为 newArray 的长度永远不会达到 numbers.length。

var numbers = [2, 7, 13, 24];
var newArray = [];

console.log(numbers.map(v => Math.pow(v, 2)));

或者:

var numbers = [2, 7, 13, 24];
var newArray = [];

for (var i = 0; i < numbers.length; i++) {
  newArray.push(Math.pow(numbers[i], 2));
}

console.log(newArray);

【讨论】:

  • 您能否编辑您的答案并解释您的代码是如何工作的? froggyguts 似乎是编程新手,我相信他们以及任何未来的流浪者都会从解释中受益。
  • 是的,先生。现在将添加它。
  • 非常感谢!我很新:) 为什么将推送方法分配给变量是不好的做法?
  • 使用代码numbers = newArray.push(Math.pow(numbers[i], 2)) 基本上是在循环的每个循环中用一个元素替换 numbers 变量的值。 numbers.length 将变为 1,循环将中断。
  • @froggyguts,这还不错,但在你的情况下它是错误的,因为它不会返回你可能认为的那样。 check the reference edit:K. Daniel,您可能还想查看参考资料。但你是对的,代码会失败;不是抛出,而是失败。
【解决方案2】:

为什么不直接使用地图

var result = [1,2,3,4,5].map(function(val){
  return Math.pow(val,2);
});

console.log(result); // [1, 4, 9, 16, 25]

【讨论】:

    【解决方案3】:

    使用array.map()为数组中的每个元素设置一个回调函数:

    var arr1 = [1,2,3,4];
    
    function squareIt(arr) {
      return arr.map(function (x) {
        return Math.pow(x, 2);
      });
    }
    
    alert(squareIt(arr1));
    

    【讨论】:

      猜你喜欢
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多