有说服力的JavaScript反转数组就地解释
我正在用Marijn Haverbeke的雄辩JavaScript进行练习,并正在解决以下问题: 编写一个函数reverseArrayInPlace,修改作为参数给定的数组,以反转其元素。不要使用标准的反向方法 给出的解决方案如下:有说服力的JavaScript反转数组就地解释,javascript,arrays,methods,Javascript,Arrays,Methods,我正在用Marijn Haverbeke的雄辩JavaScript进行练习,并正在解决以下问题: 编写一个函数reverseArrayInPlace,修改作为参数给定的数组,以反转其元素。不要使用标准的反向方法 给出的解决方案如下: function reverseArrayInPlace(array) { for (var i = 0; i < Math.floor(array.length / 2); i++) { var old = array[i];
function reverseArrayInPlace(array) {
for (var i = 0; i < Math.floor(array.length / 2); i++) {
var old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}
我知道它使用阵列的中点作为旋转点,但是有人能给我一个逐步的解释吗
function reverseArrayInPlace(array) {
//iterate thru half of original array
for (var i = 0; i < Math.floor(array.length / 2); i++) {
var old = array[i]; //cache original i value
array[i] = array[array.length - 1 - i]; //set i value to its "opposite" from end of array
array[array.length - 1 - i] = old; //set "opposite" to be original i value
}
return array;
}
在遍历数组的1/2时,交换距离数组前端和末端相等的2个值。例如:
原始数组:[1,2,3,4,5]
步骤i=0:[5,2,3,4,1]1和5被交换
步骤i=1:[5,4,3,2,1]2和4被交换
在遍历数组的1/2时,交换距离数组前端和末端相等的2个值。例如:
原始数组:[1,2,3,4,5]
步骤i=0:[5,2,3,4,1]1和5被交换
步骤i=1:[5,4,3,2,1]2和4被交换逐行进行:
for (var i = 0; i < Math.floor(array.length / 2); i++) {
暂时将数组的当前值存储在变量old中的位置i处
将i位置的值设置为数组最后一个元素的值减去当前i
将数组最后一个元素减去当前i的值设置为旧变量中存储的上一个值
简而言之,以下是实际情况下发生的情况:
old将存储当前循环值。该值将替换为最后一个值减去当前索引。基本上,当i为0时,数组[0]变为数组[4],反之亦然。当i为1时,数组[1]将变为数组[3],反之亦然。[array.length-1-i]是必需的,因为数组中的索引从0开始,所以array.length-1是数组的最后一个元素,而-i将偏移量移动i,这使得可以将第一个元素的值与最后一个元素的值切换,反之亦然
那么,交易在哪里而不是进行常规的for循环呢
好的,诀窍是它将花费一半的时间,一次替换两个值,而不是循环整个数组,一次替换一个值。逐行执行:
for (var i = 0; i < Math.floor(array.length / 2); i++) {
暂时将数组的当前值存储在变量old中的位置i处
将i位置的值设置为数组最后一个元素的值减去当前i
将数组最后一个元素减去当前i的值设置为旧变量中存储的上一个值
简而言之,以下是实际情况下发生的情况:
old将存储当前循环值。该值将替换为最后一个值减去当前索引。基本上,当i为0时,数组[0]变为数组[4],反之亦然。当i为1时,数组[1]将变为数组[3],反之亦然。[array.length-1-i]是必需的,因为数组中的索引从0开始,所以array.length-1是数组的最后一个元素,而-i将偏移量移动i,这使得可以将第一个元素的值与最后一个元素的值切换,反之亦然
那么,交易在哪里而不是进行常规的for循环呢
好的,诀窍是它将花费一半的时间,一次替换两个值,而不是循环整个数组,一次替换一个值。您需要知道的是什么,在JS中,其余的就像一个伪代码。顺便说一句,你总是可以用内置的数组方法来反转数组。你需要知道的可能是什么,而在JS和其他方面就像一个伪代码。顺便说一句,你总是可以用内置的数组方法来反转数组。数组的可能重复
var old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;