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

时间:2015-05-09 01:49:12

标签: javascript arrays algorithm

我坚持这个算法挑战,无法找到一种方法。我试图避免使用.shift()方法。

我们说我有一个" var x = [1,5,10,7,-2]"我想要做的是将一个点移到左边,同时删除数组中的第一个项目,即#34; 1"。另外我想在数组的末尾添加0以替换该点。目标是使数组成为" var x = [5,10,7,-2,0]",我会想象使用for循环来实现这一点。所以我基本上交换了数组的第一个成员,并在数组的末尾交换为0。

我不允许使用反向或排序方法。我唯一允许使用这个问题的方法是.length。 .pop或.push。我也可以使用for循环和if else语句。这些是我的限制。

3 个答案:

答案 0 :(得分:2)

您可以使用for循环

NumericVector

答案 1 :(得分:2)

甚至更短......

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

答案 2 :(得分:0)

如果您希望维护稀疏数组并且只有一个循环可供使用,那么算法需要在复制之前测试成员:

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;
}

可以简化为:

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;
}

哪个代码少,但不是那么简单,也可能更慢。