Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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 for循环中i的行为不是';这不是我所期望的_Javascript_Arrays_For Loop - Fatal编程技术网

Javascript for循环中i的行为不是';这不是我所期望的

Javascript for循环中i的行为不是';这不是我所期望的,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我已经用reverse()和push()解决了下面的问题,但为了我自己的学习,我也想用for..循环来解决它,我很高兴我这么做了,因为我发现了一些奇怪的行为,我希望有人能解释并指出给我看 我对返回新数组时得到的结果感到非常困惑。我得到了正确的长度,但让我抓狂的是新数组的值。就好像我没有在赋值语句的左侧递增一样 提前感谢您抽出时间!:) 问题出在这里 // Write a function called unshift which accepts an array and a value and

我已经用reverse()和push()解决了下面的问题,但为了我自己的学习,我也想用for..循环来解决它,我很高兴我这么做了,因为我发现了一些奇怪的行为,我希望有人能解释并指出给我看

我对返回新数组时得到的结果感到非常困惑。我得到了正确的长度,但让我抓狂的是新数组的值。就好像我没有在赋值语句的左侧递增一样

提前感谢您抽出时间!:)

问题出在这里

// Write a function called unshift which accepts an array and a value and adds the value to the beginning of the array. This function should return the new length of the array.

// Do not use the built in Array.unshift() function!

const arr = [1, 2, 3];
unshift(arr, 0); // return value is 4, the length of the array
// arr; // [0, 1, 2, 3] 

// unshift([4, 5, 6, 7], 10); // return value is 5, the length of 
the array
// arr; // [10,4,5,6,7]
我试过使用一个临时变量

功能取消移位(arr、val){
让柯尔瓦尔
arr.length=arr.length+1//将添加位置添加到
排列
对于(设i=0;i

这是我认为有效的解决方案

function unshift(arr, val) {
  arr.length = arr.length + 1 // adds an addition position to the array
  for (let i = 0; i < arr.length - 1; i++) { // my loop condition
    arr[i + 1] = arr[i] // arr[i] is not behaving as expected
  }
  arr[0] = val
  return arr // I'm returning the arr rather than its length for now
}
但事实就是这样:

unshift(arr, 0); // 4
// arr; // [0,1,1,1] // ??? It's as if arr[i] isn't incrementing

使用
push
reverse

const unshift = (arr, val) => (arr.reverse(), arr.push(val), arr.reverse()).length;

使用
push
reverse

const unshift = (arr, val) => (arr.reverse(), arr.push(val), arr.reverse()).length;

覆盖实际值。如果希望保持该方法,则需要存储最后一个值并在循环中分配该值

函数反移位(arr,val){
var项目=arr[0];
arr.length=arr.length+1;
for(设i=1;iconsole.log(arr);//[0,1,2,3]
覆盖实际值。如果希望保持该方法,则需要存储最后一个值并在循环中分配该值

函数反移位(arr,val){
var项目=arr[0];
arr.length=arr.length+1;
for(设i=1;i
带有


当您与数组中的项目有任何关系时,可以使用
for
。如果不需要使用,请确保不要使用它。这是因为一些性能问题。
var-arr=[1,2,3];
功能取消移位(arr、val){
arr.unshift(val)//在数组的第一个位置添加值
log(arr)//在控制台中显示更新的数组
return arr.length//返回数组的长度
}

unshift(arr,0)
当您与数组中的项目有任何关系时,可以使用
for
。如果不需要使用,请确保不要使用它。这是因为一些性能问题。
var-arr=[1,2,3];
功能取消移位(arr、val){
arr.unshift(val)//在数组的第一个位置添加值
log(arr)//在控制台中显示更新的数组
return arr.length//返回数组的长度
}

从(假定的家庭作业或测试)指令中取消移位(arr,0)
:“此函数应返回数组的新长度”Whoops-fixed@Kaddath。从(假定的家庭作业或测试)指令中:“此函数应返回数组的新长度”Whoops-fixed@Kaddath。好的,明白了!“由于覆盖而丢失信息”从现在的行为来看,这完全有道理。谢谢你在这件事上帮助我。我很感激。好的,明白了!“由于覆盖而丢失信息”从现在的行为来看,这完全有道理。谢谢你在这件事上帮助我。我很感激。尼娜,谢谢你用我的方法展示了一种方法;在最后开始循环(大多数人推荐的)与我尝试的方式之间的对比真的帮助我理解发生了什么。我真的很感谢你在这方面的意见:)尼娜,谢谢你通过坚持我的方法展示了一种方法;在最后开始循环(大多数人推荐的)与我尝试的方式之间的对比真的帮助我理解发生了什么。我非常感谢您在这方面的意见:)
for (let i = 0; i < arr.length - 1; i++) { // my loop condition
  arr[i + 1] = arr[i] // arr[i] is not behaving as expected