Javascript 为什么在map方法中使用pop()方法时会停止工作?
我想在不使用反向方法的情况下就地反转数组。我尝试了以下代码: 函数反转{ 返回arr.map=>{ 返回arr.pop } } 控制台.logreversearlay[1,2,3,4]; //日志[4,3,未定义,未定义]问题是,您弹出了一些元素,因此它们不再存在于数组中。所以,前两个元素是popped,另外两个元素写在这些点上,但在内部,它们同时不再存在 还有许多其他更好的解决方案,例如: 问题是,您弹出一些元素,因此它们不再存在于数组中。所以,前两个元素是popped,另外两个元素写在这些点上,但在内部,它们同时不再存在 还有许多其他更好的解决方案,例如:Javascript 为什么在map方法中使用pop()方法时会停止工作?,javascript,arrays,dictionary,Javascript,Arrays,Dictionary,我想在不使用反向方法的情况下就地反转数组。我尝试了以下代码: 函数反转{ 返回arr.map=>{ 返回arr.pop } } 控制台.logreversearlay[1,2,3,4]; //日志[4,3,未定义,未定义]问题是,您弹出了一些元素,因此它们不再存在于数组中。所以,前两个元素是popped,另外两个元素写在这些点上,但在内部,它们同时不再存在 还有许多其他更好的解决方案,例如: 问题是,您弹出一些元素,因此它们不再存在于数组中。所以,前两个元素是popped,另外两个元素写在这些
在数组上进行迭代时,将从数组中删除元素。报告说: map处理的元素范围是在第一次调用callback….之前设置的。。。在调用映射开始之后和被访问之前删除的元素不会被访问 所以map在开始时确定它将迭代4次,创建一个包含4个元素的数组 在第一次迭代中,arr.pop删除了arr[3]。在第二次迭代中,它删除了arr[2] 第三次迭代预计处理arr[2]。但是,由于该元素不再存在,因此它不调用回调函数,只在结果数组中存储未定义的元素。同样的事情发生在第四次迭代中 您可以迭代数组的一个副本 函数反转{ 返回[…arr].map=>{ 返回arr.pop } }
控制台.logreversearlay[1,2,3,4] 在数组上进行迭代时,将从数组中删除元素。报告说: map处理的元素范围是在第一次调用callback….之前设置的。。。在调用映射开始之后和被访问之前删除的元素不会被访问 所以map在开始时确定它将迭代4次,创建一个包含4个元素的数组 在第一次迭代中,arr.pop删除了arr[3]。在第二次迭代中,它删除了arr[2] 第三次迭代预计处理arr[2]。但是,由于该元素不再存在,因此它不调用回调函数,只在结果数组中存储未定义的元素。同样的事情发生在第四次迭代中 您可以迭代数组的一个副本 函数反转{ 返回[…arr].map=>{ 返回arr.pop } }
控制台.logreversearlay[1,2,3,4];当您在数组上进行迭代时,您正在从数组中删除元素。已经有了一种用于数组的反向方法。为什么要重新发明轮子?返回arr[arr.length-1-i];应该做job@Taplar问题是不使用这种方法,我明白了。如果这是为了学习,很酷。否则,这只会浪费时间。在对数组进行迭代时,您正在从数组中删除元素。已经有了一种用于数组的反向方法。为什么要重新发明轮子?返回arr[arr.length-1-i];应该做job@Taplar问题是不使用这种方法,我明白了。如果这是为了学习,很酷。这个解决方案的问题是,它没有像请求的那样就位原始代码也没有就位。map总是创建一个新数组。虽然这是真的,但问题是需要一个就地解决方案。这就是为什么我想知道这个解决方案的问题是,它不像请求的那样到位原始代码也不到位。map总是创建一个新数组。虽然这是真的,但问题是需要一个就地解决方案。这就是为什么我想知道
function reverse (array) {
var i = 0,
n = array.length,
middle = Math.floor(n / 2),
temp = null;
for (; i < middle; i += 1) {
temp = array[i];
array[i] = array[n - 1 - i];
array[n - 1 - i] = temp;
}
}