[英]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.