Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 为什么在map方法中使用pop()方法时会停止工作?_Javascript_Arrays_Dictionary - Fatal编程技术网

Javascript 为什么在map方法中使用pop()方法时会停止工作?

Javascript 为什么在map方法中使用pop()方法时会停止工作?,javascript,arrays,dictionary,Javascript,Arrays,Dictionary,我想在不使用反向方法的情况下就地反转数组。我尝试了以下代码: 函数反转{ 返回arr.map=>{ 返回arr.pop } } 控制台.logreversearlay[1,2,3,4]; //日志[4,3,未定义,未定义]问题是,您弹出了一些元素,因此它们不再存在于数组中。所以,前两个元素是popped,另外两个元素写在这些点上,但在内部,它们同时不再存在 还有许多其他更好的解决方案,例如: 问题是,您弹出一些元素,因此它们不再存在于数组中。所以,前两个元素是popped,另外两个元素写在这些

我想在不使用反向方法的情况下就地反转数组。我尝试了以下代码:

函数反转{ 返回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;
  }
}