繁体   English   中英

打字稿交换数组项目

[英]Typescript swap array Items

如何使用打字稿交换两个元素

elements:elements[] =[];
elements.push(item1);
elements.push(item2);
elements.push(item3);
elements.push(item4);


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

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

*使用临时变量的javascript示例*

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

但是在打字稿中有任何 api 在做同样的事情,比如array.swap()

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

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

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

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

操场上的代码

如果您正在使用模块,那么您需要这样做来扩充Array接口:

declare global {
    interface Array<T> {
        swap(a: number, b: number): void;
    }
}
swapArray(Array:any,Swap1:number,Swap2:number) : any
{
    var temp = Array[Swap1];
    Array[Swap1] = Array[Swap2]
    Array[Swap2] = temp
    return Array;
}

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

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

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

因此,如果您有一个包含 3 个元素的数组,如下所示: a=['me','you','us']

你可以像这样交换“我”和“你”:

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

因此,采用 OP 的 4 元素数组,要交换第一个(第 0 个)和最后一个(第 3 个)元素,您可以执行以下操作:

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

但是,这不是容易理解的代码,所以我不推荐它。 使用 tmp 变量更直接。 此外,它的性能或可维护性不是很好,因为您必须指定原始数组的每个元素。

这个问题很老,但如果你像我一样,你可能会遇到这篇检查内置交换行为的帖子。

接受的答案使用解构,这很好,但比使用 temp 交换元素慢。 如果性能是一个问题,请使用 OP 描述的 temp 方法。

一个基准

结果是解构比临时方法慢一个数量级。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM