Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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_Recursion - Fatal编程技术网

Javascript 递归地将数组中的每个数字平方

Javascript 递归地将数组中的每个数字平方,javascript,recursion,Javascript,Recursion,我提出了以下方法来返回按升序排序的平方数数组 function sortedSquaredArray(array) { let squaredArray = []; for(i=0;i<array.length;i++){ squaredArray.push(array[i] ** 2); } return squaredArray.sort((a,b) => a-b); } 我相信是sortedSquaredArray(array.sh

我提出了以下方法来返回按升序排序的平方数数组

function sortedSquaredArray(array) {
    let squaredArray = [];
    for(i=0;i<array.length;i++){
        squaredArray.push(array[i] ** 2);
    }
  return squaredArray.sort((a,b) => a-b);
}
我相信是
sortedSquaredArray(array.shift())
导致了这个失败。。我想用
.slice
.concat
来解决这个问题,但我还是很费劲


我缺少什么?

.shift
返回已删除的元素-它在经过变异后不会返回数组

为了实现正确的递归,您还需要将数组作为参数传递,或者在最终迭代期间创建它,并将其返回给先前的调用者,以便将其项插入其中

因此,您只需在最后进行排序,我建议将其作为参数传递,以便不使用递归的最终调用可以进行排序

function sortedSquaredArray(input, squares = []) {
  if (!input.length) {
    return squares.sort((a, b) => a - b);
  }
  squares.push(input.pop() ** 2);
  return sortedSquaredArray(input, squares);
}
函数sortedSquaredArray(输入,方块=[]){
如果(!input.length){
返回正方形。排序((a,b)=>a-b);
}
squares.push(input.pop()**2);
返回分拣的方形阵列(输入,正方形);
}

日志(sortedSquaredArray([2,4,1])我会将排序与平方分开,因为平方本身可能很有用。这是一种针对小型问题执行此类递归的有用方法:

const squaredArray=([n,…ns])=>
n==未定义
? []
:[n*n,…平方达雷(ns)]
const sortedSquaredArray=(ns)=>
平方达雷(ns).排序((a,b)=>a-b)

log(sortedSquaredArray([4,9,2,5,8]))
谢谢。这很有趣。。我从未想过将值存储在参数中。你怎么这么快就想出了解决办法,我真是大吃一惊。如果我可以问一下,如果只有一个参数
input
,而没有
squares=[]
,函数会是什么样子?我尝试了一种变体,其中函数中有一个常量,但递归调用(预期)会重置该值,除非我创建一个内部函数来分隔作用域,否则我不确定如何将其转义。请参见编辑,采用我刚开始提到的另一种方法——在最后一次迭代时创建数组,然后返回给其他人,让他们推送。你可以将所有数组放在一个函数中,而不是两个函数中,但是一个函数效率很低,因为我想你必须在每次迭代时对数组进行排序,而不是只回答一次你的问题?
function sortedSquaredArray(input, squares = []) {
  if (!input.length) {
    return squares.sort((a, b) => a - b);
  }
  squares.push(input.pop() ** 2);
  return sortedSquaredArray(input, squares);
}