【问题标题】:Swapping two items in a javascript array [duplicate]交换javascript数组中的两个项目[重复]
【发布时间】:2010-10-25 02:57:00
【问题描述】:

可能重复:
Javascript swap array elements

我有一个这样的数组:

this.myArray = [0,1,2,3,4,5,6,7,8,9];

现在我想做的是,交换两个项目的位置给他们的位置。 例如,我想将第 4 项(即 3)与第 8 项(即 7)交换 这应该导致:

this.myArray = [0,1,2,7,4,5,6,3,8,9];

我怎样才能做到这一点?

【问题讨论】:

标签: javascript arrays


【解决方案1】:

拼接的返回值是被移除的元素-

不需要临时变量

Array.prototype.swapItems = function(a, b){
    this[a] = this.splice(b, 1, this[a])[0];
    return this;
}

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

alert(arr.swapItems(3, 7));

返回值:(数组)

    0,1,2,7,4,5,6,3,8,9

【讨论】:

  • 很好!!怎么没有其他人投票赞成这个答案。
  • 理解该解决方案的关键是 splice() 在 start 和 deleteCount 之后可以有额外的项目,这些项目将被插入到拼接位置。只有一个缺陷: splice() 返回一个数组,因此要从该数组中获取一个(也是唯一一个)元素,必须说:this[a]= this.splice(b, 1, this[a])[0];
【解决方案2】:

只需重新分配元素,创建一个中间变量来保存您覆盖的第一个变量:

var swapArrayElements = function(arr, indexA, indexB) {
  var temp = arr[indexA];
  arr[indexA] = arr[indexB];
  arr[indexB] = temp;
};
// You would use this like: swapArrayElements(myArray, 3, 7);

如果你想让它更容易使用,你甚至可以将它添加到内置的 Array 原型中(正如 kennebec@ 建议的那样);但是,请注意,这通常是一种需要避免的坏模式(因为当多个不同的库对内置类型的内容有不同的想法时,这可能会产生问题):

Array.prototype.swap = function(indexA, indexB) {
   swapArrayElements(this, indexA, indexB);
};
// You would use this like myArray.swap(3, 7);

请注意,此解决方案比使用 splice() 的替代方案要高效得多。 (O(1) vs O(n))。

【讨论】:

  • O(1) 下面不是
  • 无突变:const swapArrayElements = (arr, a, b) => { let _arr = [...arr]; let temp = _arr[a]; _arr[a] = _arr[b]; _arr[b] = temp; return _arr }
【解决方案3】:

你可以只使用一个临时变量来移动东西,例如:

var temp = this.myArray[3];
this.myArray[3] = this.myArray[7];
this.myArray[7] = temp;

You can test it out here,或者函数形式:

Array.prototype.swap = function(a, b) {
  var temp = this[a];
  this[a] = this[b];
  this[b] = temp;
};

那你就这样称呼它:

this.myArray.swap(3, 7);

You can test that version here.

【讨论】:

    猜你喜欢
    • 2013-04-20
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    相关资源
    最近更新 更多