将数组元素从一个数组位置移到另一个数组位置

我很难弄清楚如何移动一个数组元素。 例如,给定以下内容:

var arr = [ 'a', 'b', 'c', 'd', 'e'];

如何在'b'之前写一个函数来移动'd' 'b'

'a' 'c'之后的'c'

移动之后,其余元素的索引应该更新。 这意味着在移动后的第一个例子中,arr [0]会='a',arr [1] ='d'arr [2] ='b',arr [3] ='c',arr [4] = 'E'

这看起来应该很简单,但是我无法把头围住。


如果你想在npm上使用版本,array-move是最接近这个答案的,尽管它不是相同的实现。 请参阅其用法部分了解更多详情。 这个答案的前一个版本(修改后的Array.prototype.move)可以在npm的array.prototype.move处找到。


我用这个函数取得了相当不错的成功:

function array_move(arr, old_index, new_index) {
    if (new_index >= arr.length) {
        var k = new_index - arr.length + 1;
        while (k--) {
            arr.push(undefined);
        }
    }
    arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);
    return arr; // for testing
};

// returns [2, 1, 3]
console.log(array_move([1, 2, 3], 0, 1)); 

这里是我在JSPerf上找到的一个班轮....

Array.prototype.move = function(from, to) {
    this.splice(to, 0, this.splice(from, 1)[0]);
};

这是非常棒的阅读,但如果你想要性能(小数据集)尝试...

 Array.prototype.move2 = function(pos1, pos2) {
    // local variables
    var i, tmp;
    // cast input parameters to integers
    pos1 = parseInt(pos1, 10);
    pos2 = parseInt(pos2, 10);
    // if positions are different and inside array
    if (pos1 !== pos2 && 0 <= pos1 && pos1 <= this.length && 0 <= pos2 && pos2 <= this.length) {
      // save element from position 1
      tmp = this[pos1];
      // move element down and shift other elements up
      if (pos1 < pos2) {
        for (i = pos1; i < pos2; i++) {
          this[i] = this[i + 1];
        }
      }
      // move element up and shift other elements down
      else {
        for (i = pos1; i > pos2; i--) {
          this[i] = this[i - 1];
        }
      }
      // put element from position 1 to destination
      this[pos2] = tmp;
    }
  }

我无法相信,应该都是理查德斯卡罗特。 它在这个性能测试中击败了较小数据集的基于拼接的方法。 然而,Darwayne指出,它在大型数据集上速度要慢得多。


我喜欢这种方式。 它工作,它快速和优雅。

function arraymove(arr, fromIndex, toIndex) {
    var element = arr[fromIndex];
    arr.splice(fromIndex, 1);
    arr.splice(toIndex, 0, element);
}

注意:一定要记得检查你的数组边界。

链接地址: http://www.djcxy.com/p/19037.html

上一篇: Move an array element from one array position to another

下一篇: Get all unique values in an array (remove duplicates)