gpt4 book ai didi

javascript - reverseArrayInPlace() 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 07:59:58 26 4
gpt4 key购买 nike

关于这个问题还有其他问题,但我想知道为什么我的代码没有反转给定的数组。注意:我对编码非常陌生,只是自学并尝试根据个人兴趣进行练习。

在书中Eloquent Javascript ,我们被要求编写两个不同的函数来反转数组。第一个函数 reverseArray 应该输出一个与给定数组相反的新数组。这个很简单。

第二个函数,reverseArrayInPlace,应该改变给定的数组,使其反转。假设仅使用第一个函数然后将其值分配给第一个数组是“作弊”。此外,我们不能使用 .reverse 方法。

这是我的尝试,但我不明白为什么它不起作用:

var reverseArrayInPlace = function(anArray) {
for (var i = 1; i < anArray.length; i++) {
anArray = anArray.slice(i, i+1).concat
(anArray.slice(0,i)).concat(anArray.slice(i+1));
}
}

注意:我不喜欢我编写此函数的方式,但我仍然无法确定它为什么不起作用。

这里是书中给出的测试代码和目标输出:

var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]

书中给出的提示是这样说的:

"诀窍是交换第一个和最后一个元素,然后是第二个和倒数第二个元素,依此类推。您可以通过遍历数组长度的一半(使用 Math.floor向下舍入——你不需要触及长度为奇数的数组的中间元素)并将位置 i 的元素与位置 array.length - 1 - i 的元素交换。你可以使用局部变量来简单地保留其中一个元素,用它的镜像覆盖那个元素,然后将局部变量的值放在镜像曾经所在的位置。"

我不喜欢我的想法,但我更不喜欢这个暗示。有没有比我的更符合提示的想法“就地”更改数组的精神?

感谢您的帮助。同样,我们不能只在给定数组上使用称为 .reverse 的东西。

最佳答案

虽然这不是最短的解决方案,但我尽量把它写得容易理解。

基本上我们在数组中创建了 2 个索引指针,左边和右边,左边当然从第一个元素开始,然后右边是最后一个元素。

因为我们不需要交换中间部分,所以在 while 循环中简单地检查 left < right 将使其在到达那里之前停止。

然后我们使用 tmp var,在我们交换项目时用作临时占位符,之后我们可以增加左侧和减少右侧索引指针。

为了使其成为就地替换,我们使用索引数组访问方法,使用 [] 代替 slice 等。

var reverseArrayInPlace = function(anArray) {
var left = 0, right = anArray.length - 1, tmp;
while (left < right) {
tmp = anArray[left];
anArray[left] = anArray[right];
anArray[right] = tmp;
left ++;
right --;
}
}

var a = [1,2,3,4,5];

reverseArrayInPlace(a);

console.log(a);

关于javascript - reverseArrayInPlace() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com