Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【TypeScript】中的数组和元组之间的关系

【TypeScript】中的数组和元组之间的关系

作者头像
痴心阿文
发布于 2022-11-21 00:48:04
发布于 2022-11-21 00:48:04
2.9K00
代码可运行
举报
运行总次数:0
代码可运行

 前言:学友写【TypeScript】的第二篇文章,TypeScript数组和元组,适合学TypeScript的一些同学及有JavaScript的同学,之前学的Javascript的同学都了解过数组,都有一些基础,今天给大家看的是TypeScript中的数组,以及TypeScript中的元组,分别介绍他们的读取和操作方法,好,码了差不多7600多字,充实的一天,不愧是我,真棒!

 好了,话不多说,肝着!

数组

数组概念: 数组即一组数据,它把一系列具有相同类型的数据组织在一起,成为一个可操作的对象。

举例:菜单 即可看做一个数组,里面的菜品就是数组里面的数据

  • 菜单:
  • 宫保鸡丁
  • 西湖醋鱼
  • 佛跳墙

插一句:

安装typescript的方法: npm install -g typescript

查看TypeScript版本:tsc -v

编译ts文件: tsc 文件名

*** 声明数组,创建数组 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
varlet 数组名:元素类型[] = [1,2,3...]<

访问数组

*** 1.访问数组下标元素

array[下标数字] 

下面的是Typescript访问数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 声明数组 array[]
 * js创建数组
 * let arrlist = [1,2,3,4,5]
 * 
 * typescript创建数组
 * let arrlist:number[] = [6,7,8,9,10]
 * 
 * */
 let arrlistA = [1,2,3,4,5] //js写法
 let arrlistB:number[] = [6,7,8,9,10] //typescript写法
 let arrlistC:string[] = ["uzi","The shy","小明","小虎"]
 
 
 
 console.log(arrlistA.length); // 5
 console.log(arrlistB.length); // 5
 document.getElementById("btn1").onclick = function(){
	 for(let i=0;i<arrlistA.length;i++){
	 	alert(arrlistA[i])
	 }
 }
 document.getElementById("btn2").onclick = function(){
 	 arrlistB.push(11,12,13) //追加数组arrlistB
	 for(let i=0;i<arrlistB.length;i++){
	 	console.log(arrlistB[i])
	 }
	 console.log(arrlistB.length)
	
 }
 document.getElementById("btn3").onclick = function(){
 	 for(let i in arrlistB){
		console.log("访问数组下所有下标:" + arrlistB[i])  //访问arrlistB 数组下所有下标
 	 	console.log("访问数组下第四个下标:" + arrlistB[4]) //访问arrlistB 数组下标第四个
	 }
 }
 
	console.log("arrlistC:" + arrlistC)
	delete arrlistC[0];//删除uzi
	console.log("arrlistC:" + arrlistC)
 //点击删除数组元素
 // document.getElementById("btn4").onclick = function(){
	// for(let i of arrlistC){
	// 	delete arrlistC[1]; //、 删除uzi
	// }
	// console.log("arrlistC:" + arrlistC)
 // }

 下面的是TypeScript转译后生成的js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 声明数组 array[]
 * js创建数组
 * let arrlist = [1,2,3,4,5]
 *
 * typescript创建数组
 * let arrlist:number[] = [6,7,8,9,10]
 *
 * */
var arrlistA = [1, 2, 3, 4, 5]; //js写法
var arrlistB = [6, 7, 8, 9, 10]; //typescript写法
var arrlistC = ["uzi", "The shy", "小明", "小虎"];
console.log(arrlistA.length); // 5
console.log(arrlistB.length); // 5
document.getElementById("btn1").onclick = function () {
    for (var i = 0; i < arrlistA.length; i++) {
        alert(arrlistA[i]);
    }
};
document.getElementById("btn2").onclick = function () {
    arrlistB.push(11, 12, 13); //追加数组arrlistB
    for (var i = 0; i < arrlistB.length; i++) {
        console.log(arrlistB[i]);
    }
    console.log(arrlistB.length);
};
document.getElementById("btn3").onclick = function () {
    for (var i in arrlistB) {
        console.log("访问数组下所有下标:" + arrlistB[i]); //访问arrlistB 数组下所有下标
        console.log("访问数组下第四个下标:" + arrlistB[4]); //访问arrlistB 数组下标第四个
    }
};
console.log("arrlistC:" + arrlistC);
delete arrlistC[0]; //删除uzi
console.log("arrlistC:" + arrlistC);
//点击删除数组元素
// document.getElementById("btn4").onclick = function () {
//     for (var _i = 0, arrlistC_1 = arrlistC; _i < arrlistC_1.length; _i++) {
//         var i = arrlistC_1[_i];
//         delete arrlistC[1]; //、 删除uzi
//     }
//     console.log("arrlistC:" + arrlistC);
// };

*** 2.通过循环访问数组元素

删除数组 delete array[数组下标]

点击删除数组下标

*** 数组方法

数组方法 表4-1 

***数组遍历方法

数组遍历方法 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for for(let i=0;i

for of for(let item of array)

for in for(let item in array)

forEach 遍历

map遍历

多维数组

多维数组为二维数组和三位数组,常用二维数组进行介绍

javascript中没有二维数组(实现方法:向数组中插入数组)

typescript中二维数组:第一个维度为行,第二个维度为列

语法:[][]

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let twoarrs : string[][]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let twoarrs : Array<Array<string>>

元组

元组概念:

元组(tuple) 是关系数据库中的基本概念,关系是一张表,表中的每行(数据库中的每条记录)就是一个元组,每列就是一个属性。

***元组的特点: 6点

  • 1.数据类型可以是任何类型
  • 2.在元组中可以包含其他元组
  • 3.元组可以是空元组
  • 4.元组复制必须元素类型兼容
  • 5.元组的取值通数组的取值,标号从0开始
  • 6.元组可以作为参数传递给函数

***访问元组中的值 数组返回类型只有一个,而元组返回可以是不同的类型

1.通过下标访问 console.log(row[下标数字])

2.循环遍历访问

TypeScript元组文件代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 
 * 1.元组声明和数组类似
 * 
 * 数组 声明  datatype[]
 * 			let arraylist:number:[] = []
 * 元组 声明 	[datatype1,datatype2,datatype3,.....]  可以跟多个
 * 		写法:		let row:[number,string,number] = [1,"jack",99]
 * 
 * 2.访问元组中的值
 * 
 * 和数组访问一样 
 * 通过 console.log() 访问,
 * 通过 循环遍历 进行访问
 * 
 * 
 * */
 
 
 
 //访问元组中的值 数组返回类型只有一个,而元组返回可以是不同的类型
 //元组的取值通数组的取值,标号从0开始
 let row:[number,string,number] = [20220323,"星期三",1429]
 console.log(row[0]);//  20220323
 for(let i of row){
	 console.log("循环遍历元组:" + i);
 }
 //push  追加 page 112页
 row.push(1,"typescript",2)
 console.log(row)
 //pop 删除 移除元组中最后一个元素 长度减1
   let del = row.pop();
   console.log("移除的元素:" + del);
   console.log("元组的长度:" + row.length);
   
/**
 * 元组更新
 * 初始化元组后,通过元组下标进行赋值并完成更新
 * 
 * */
 let newlist:[number,string,number] = [2022,"时间",1513];
 console.log("初始化的元组:" + newlist);
 newlist[1] = "当前时间";
 console.log("更新后的元组:" + newlist);
 /**
  * 
  * 元组解构 
  * 
  * 	元组解构和数组类似
  * 	
  * 							数组解构出来的元素是相同的
  * 	可以把元组元素赋值多个变量,解构出来各个元素类型可能是不同的
  * 
  * */
  let yuanzujiegou:[string,string,number,number] = ["你好","世界",1525,2022]
  //元组解构 不能超出元组元素数量,也就是越界解构,否则会报错
  let [a,b,c,d] = yuanzujiegou;
  console.log(b);  //"世界"
  
  /**
   * 
   * 生成器,迭代器
   * 
   * 生成器是一个种返回迭代器的函数,通过function关键字后的(*)星号来表示
   * 
   * 迭代器对象都有一个next()方法
   * 
   * 
   * */
   function genIterator(items){
	   let i = 0;
	   return{
		   next:function(){
			   var done = (i >= items.length);
			   var value =!done ? items[i++] : undefined;
			   return{
				   done:done,
				   value:value
			   }
		   }
	   }
   }
   let iterator = genIterator([1,2,3]);
    console.log(iterator.next());  //{value: 1, done: false}
	console.log(iterator.next()); //{value: 2, done: false}
	console.log(iterator.next()); //{value: 3, done: false}
   function *genIterator(){
	   yield 1;
	   yield 2;
	   yield 3;
   }
   //调用生成器,返回迭代器
   let iterator = genIterator();
   console.log(iterator.next());  //打印迭代器的next()方法  //{value: 1, done: false}

 下面是TypeScript 编译后生成的Js代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *
 * 1.元组声明和数组类似
 *
 * 数组 声明  datatype[]
 * 			let arraylist:number:[] = []
 * 元组 声明 	[datatype1,datatype2,datatype3,.....]  可以跟多个
 * 		写法:		let row:[number,string,number] = [1,"jack",99]
 *
 * 2.访问元组中的值
 *
 * 和数组访问一样
 * 通过 console.log() 访问,
 * 通过 循环遍历 进行访问
 *
 *
 * */
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
//访问元组中的值 数组返回类型只有一个,而元组返回可以是不同的类型
//元组的取值通数组的取值,标号从0开始
var row = [20220323, "星期三", 1429];
console.log(row[0]); //  20220323
for (var _i = 0, row_1 = row; _i < row_1.length; _i++) {
    var i = row_1[_i];
    console.log("循环遍历元组:" + i);
}
//push  追加 page 112页
row.push(1, "typescript", 2);
console.log(row);
//pop 删除 移除元组中最后一个元素 长度减1
var del = row.pop();
console.log("移除的元素:" + del);
console.log("元组的长度:" + row.length);
/**
 * 元组更新
 * 初始化元组后,通过元组下标进行赋值并完成更新
 *
 * */
var newlist = [2022, "时间", 1513];
console.log("初始化的元组:" + newlist);
newlist[1] = "当前时间";
console.log("更新后的元组:" + newlist);
/**
 *
 * 元组解构
 *
 * 	元组解构和数组类似
 *
 * 							数组解构出来的元素是相同的
 * 	可以把元组元素赋值多个变量,解构出来各个元素类型可能是不同的
 *
 * */
var yuanzujiegou = ["你好", "世界", 1525, 2022];
//元组解构 不能超出元组元素数量,也就是越界解构,否则会报错
var a = yuanzujiegou[0], b = yuanzujiegou[1], c = yuanzujiegou[2], d = yuanzujiegou[3];
console.log(b); //"世界"
/**
 *
 * 生成器,迭代器
 *
 * 生成器是一个种返回迭代器的函数,通过function关键字后的(*)星号来表示
 *
 * 迭代器对象都有一个next()方法
 *
 *
 * */
function genIterator(items) {
    var i = 0;
    return {
        next: function () {
            var done = (i >= items.length);
            var value = !done ? items[i++] : undefined;
            return {
                done: done,
                value: value
            };
        }
    };
}
var iterator = genIterator([1, 2, 3]);
console.log(iterator.next()); //{value: 1, done: false}
console.log(iterator.next()); //{value: 2, done: false}
console.log(iterator.next()); //{value: 3, done: false}
function genIterator() {
    return __generator(this, function (_a) {
        switch (_a.label) {
            case 0: return [4 /*yield*/, 1];
            case 1:
                _a.sent();
                return [4 /*yield*/, 2];
            case 2:
                _a.sent();
                return [4 /*yield*/, 3];
            case 3:
                _a.sent();
                return [2 /*return*/];
        }
    });
}
//调用生成器,返回迭代器
var iterator = genIterator();
console.log(iterator.next()); //打印迭代器的next()方法  //{value: 1, done: false}

元组操作:

***push方法

***pop方法

元组更新:

初始化元组后,通过元组下标进行赋值并完成更新

元组解构:

元组解构和数组解构类似,也可以把元组元素赋值给多个变量,只是解构出来的各个元素可能是不同类型的。

***元组解构 不能超出元组元素数量,也就是越界解构,否则会报错

PS:爱学习的学友,爱前端,爱前端,爱运营,爱推广,爱交朋友。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TypeScript 元组类型
众所周知,数组一般由同种类型的值组成,但有时我们需要在单个变量中存储不同类型的值,这时候我们就可以使用元组。在 JavaScript 中是没有元组的,元组是 TypeScript 中特有的类型,其工作方式类似于数组。
阿宝哥
2020/03/11
1.6K0
TypeScript 数组
如果数组声明时未设置类型,则会被认为是 any 类型,在初始化时根据第一个元素的类型来推断数组的类型。
程序猿的栖息地
2024/01/30
2720
TypeScript 数组
【TypeScript 演化史 — 第五章】将 async/await 编译到 ES3/ES5 (外部帮助库)
自2015年11 发布1.7版以来,TypeScript 已支持 async/await 关键字。编译器使用 yield 将异步函数转换为生成器函数。这意味着咱们无法针对 ES3 或 ES5,因为生成器仅在 ES6 中引入的。
Javanx
2020/05/07
3K0
【TypeScript 演化史 — 第五章】将 async/await 编译到 ES3/ES5 (外部帮助库)
TypeScript 元组
我们知道数组中元素的数据类型都一般是相同的(any[] 类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。
iOS程序应用
2023/05/12
2120
ES的新特性
首先来看一下ES6新增加的特性块级作用域,至于作用域的深入讲解后续会专门出一篇文章进行讲解
用户3045442
2020/08/06
1.1K0
TypeScript学习笔记(四)—— TypeScript提高
Type又叫类型别名(type alias),作用是给一个类型起一个新名字,不仅支持interface定义的对象结构,还支持基本类型、联合类型、交叉类型、元组等任何你需要手写的类型。
张果
2022/10/04
2.5K0
TypeScript学习笔记(四)—— TypeScript提高
TypeScript基础常用知识点总结
虽然简介这一部分可能有人会觉得没必要,但是我觉得还是有必要简单的写一下的。我们以后既然要经常用它,当然得从认识它开始啦!不想看就往下滑咯。
害恶细君
2022/11/22
5K0
TypeScript基础常用知识点总结
TypeScript 基础教程
通过引入强类型系统,补充JS的短板。原生JS类型的灵活性导致在实际环境中可能会出现各种不确定的bug。通过使用TS,我们可以在开发阶段既预测这些可能由类型转换导致的错误,从而提前规避bug,开发出更健全的程序。
路过的那只狗
2020/11/14
1.1K0
TypeScript中的数组和元组
TypeScript像JavaScript一样可以操作数组元素。 有两种方式可以定义数组。
玖柒的小窝
2021/11/16
2.3K0
TypeScript中的数组和元组
TypeScript 元组
在之前我们学习的数组中元素的数据类型都一般是相同的(any[] 类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。
程序猿的栖息地
2024/01/30
1150
TypeScript 元组
TypeScript 官方手册翻译计划【五】:对象类型
在 JavaScript 中,最基础的分组和传递数据的方式就是使用对象。在 TypeScript 中,我们则通过对象类型来表示。
Chor
2021/11/29
1.8K0
ES6-11
Rest 参数与 spread 扩展运算符在es6中已经引入,但仅限于数组,es9中为对象提供了像数组一样的 rest 参数和扩展运算符
4O4
2022/04/25
2520
【TypeScript】超详细的笔记式教程!进阶!!【下】
类型别名 类型别名顾名思义,即字面意思,其实断言也是字面意思,就是断定类型的方法,你说是什么类型就是什么类型,推翻约定,扯远了,继续说类型别名,举个🌰吧: type Name = string; type NameResolver = () => string; type NameOrResolver = Name | NameResolver; function getName(n: NameOrResolver): Name { if(typeof n === 'string') {
HoMeTown
2022/10/26
6330
【TypeScript】超详细的笔记式教程!进阶!!【下】
Typescript学习笔记,从入门到精通,持续记录
TypeScript 最大的优势之一便是增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等。
房东的狗丶
2023/02/17
2K0
【TypeScript】010-类型别名、字符串字面量类型、元组、枚举
上例中,我们使用 type 定了一个字符串字面量类型 EventNames,它只能取三种字符串中的一种。
訾博ZiBo
2025/01/06
950
TypeScript 简介及编码规范
TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。
阿宝哥
2019/11/05
10.7K0
TypeScript 中的元组类型:元组的特性、常见操作和注意事项
在 TypeScript 中,元组(Tuple)是一种特殊的数组类型,用于存储固定数量、不同类型的元素。元组与数组相似,但在元素类型和数量上有严格的限制。本文将详细介绍 TypeScript 中的元组类型,包括元组的特性、常见操作和注意事项。
网络技术联盟站
2023/07/06
7760
字节前端高频手写面试题(持续更新中)1
观察者需要放到被观察者中,被观察者的状态变化需要通知观察者 我变化了 内部也是基于发布订阅模式,收集观察者,状态变化后要主动通知观察者
helloworld1024
2023/01/03
7000
【TypeScript 演化史 — 第十二章】ES5/ES3 的生成器和迭代支持及 –checkJS选项下 .js 文件中的错误
TypeScript 2.3 引入了一个新的--downlevelIteration标志,为以 ES3 和 ES5 目标添加了对 ES6 迭代协议的完全支持。for...of循环现在可以用正确的语义进行向下编译。
Javanx
2020/05/09
2.1K0
【TypeScript 演化史 — 第十二章】ES5/ES3 的生成器和迭代支持及 –checkJS选项下 .js 文件中的错误
软件开发入门教程网站之TypeScript Array(数组)
如果数组声明时未设置类型,则会被认为是 any 类型,在初始化时根据第一个元素的类型来推断数组的类型。
iOS程序应用
2023/01/11
3900
相关推荐
TypeScript 元组类型
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验