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);
}