Typescript交换数组项

时间:2016-11-10 09:23:09

标签: javascript angular typescript

如何使用 typescript

交换两个元素
elements:elements[] =[];
elements.push(item1);
elements.push(item2);
elements.push(item3);
elements.push(item4);


elements[0] is item1 
elements[3] is item4

我如何 交换 typescript 中的这些项目。我知道Javascript的方式,像这样:

*使用临时变量* javascript示例

var tmp = elements[0];
elements[0] = elements[3];
elements[3] = tmp;

但是有任何api在 typescript 中做同样的事情  array.swap()

4 个答案:

答案 0 :(得分:25)

为什么不使用解构和数组。

[elements[0], elements[3]] = [elements[3], elements[0]];

答案 1 :(得分:3)

它没有内置功能,但您可以轻松添加它:

interface Array<T> {
    swap(a: number, b: number): void;
}

Array.prototype.swap = function (a: number, b: number) {
    if (a < 0 || a >= this.length || b < 0 || b >= this.length) {
        return
    }

    const temp = this[a];
    this[a] = this[b];
    this[b] = temp;
}

code in playground

如果您正在使用模块,那么您需要这样做以扩充Array界面:

declare global {
    interface Array<T> {
        swap(a: number, b: number): void;
    }
}

答案 2 :(得分:3)

swapArray(Array:any,Swap1:number,Swap2:number) : any
{
    var temp = Array[Swap1];
    Array[Swap1] = Array[Swap2]
    Array[Swap2] = temp
    return Array;
}

答案 3 :(得分:1)

你可以在Javascript中的一行中进行此操作(因此也可以使用Typescript,尽管在Typescript中你可以进行数组解构,如另一个答案中所示)。

对于原始类型(例如整数,字符串),您可以这样做来交换简单值a和b(credit here):

a = [b, b=a][0];

所以如果你有一个包含3个元素的数组,就像这样: A = [ '我', '你', '我们']

你可以像这样交换'我'和'你':

a = [a[1],a[1]=a[0],a[2]]

所以采用OP的4元素数组,交换第一个(第0个)和最后一个(第三个)元素,你会这样做:

elements = [elements[3],elements[1],elements[2],elements[3]=elements[0]]

然而,这并不容易理解代码,所以我不推荐它。使用tmp变量更简单。此外,它不是非常高效或可维护,因为您必须指定原始数组的每个元素。