将JavaScript数组向左移动一个位置,而不使用.shift()方法。算法挑战

将JavaScript数组向左移动一个位置,而不使用.shift()方法。算法挑战,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我被这个算法难题困住了,想不出一个办法来解决它。我试图避免使用.shift()方法 假设我有一个“var x=[1,5,10,7,-2]”的数组,我要做的是在删除数组中的第一项“1”时将其向左移动一个点。另外,我想在数组的末尾添加0来替换spot。目标是使数组成为“varx=[5,10,7,-2,0]”,我可以想象使用for循环来实现这一点。所以我基本上是交换出数组的第一个成员,并在数组的末尾交换0 我不允许使用反向或排序方法。我唯一可以用来解决这个问题的方法是.length。砰,或者,推。我还

我被这个算法难题困住了,想不出一个办法来解决它。我试图避免使用.shift()方法

假设我有一个“var x=[1,5,10,7,-2]”的数组,我要做的是在删除数组中的第一项“1”时将其向左移动一个点。另外,我想在数组的末尾添加0来替换spot。目标是使数组成为“varx=[5,10,7,-2,0]”,我可以想象使用for循环来实现这一点。所以我基本上是交换出数组的第一个成员,并在数组的末尾交换0


我不允许使用反向或排序方法。我唯一可以用来解决这个问题的方法是.length。砰,或者,推。我还可以使用for循环和if-else语句。这些是我的限制。

您可以使用for循环

for(var i = 1; i < x.length; i++) {
  x[i-1] = x[i];
}

x[x.length-1] = 0;
for(变量i=1;i
甚至更短

for (var i = 0; i < x.length; i += 1) {
    x[i] = x[i + 1] || 0;
}
for(变量i=0;i
如果您希望维护稀疏数组,并且只有一个循环供您使用,那么在复制成员之前,算法需要测试成员:

function shiftLeft(arr) {
  for (var i=1, iLen=arr.length; i<iLen; i++) {
    if (arr.hasOwnProperty(i)) {
      arr[i-1] = arr[i];
    } else {
      delete arr[i-1];
    }
  }
  arr[i-1] = 0;
  return arr;
}
功能移位(arr){

对于(var i=1,iLen=arr.length;iSo,您不能使用索引器,对吗?对于稀疏数组应该怎么办?例如,应该
[1,2,4]
变成
[2,4,0]
?不是我必须使用它们。而是如果有必要使用它们,那么我可以。这些只是我所局限的方法。然而,这就是我一直在寻找的答案!很抱歉我解释得不好。Oops。如果x的一个成员的值是falsy而不是零,那么就说null或undefined(或者根本不存在),这将替换为零。是的,这就是想法。最后一次迭代将计算x[i+1]未定义。这会将0分配给数组的最后一个索引。
.hasOwnProperty
是否会违反问题中所述的限制?也许,我认为只有数组方法有限制。这是我知道的唯一保留稀疏数组的方法。可接受的答案不会这样做,所以OP可能不关心它。
function shiftLeft(arr) {
  for (var i=1, iLen=arr.length; i<iLen; i++) {
    arr.hasOwnProperty(i)? arr[i-1] = arr[i] : delete arr[i-1];
  }
  arr[i-1] = 0;
  return arr;
}