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

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

 

 好了,话不多说,肝着!

数组

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

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

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

插一句:

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

查看TypeScript版本:tsc -v

编译ts文件: tsc 文件名

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

var 或 let 数组名:元素类型[] = [值1,值2,值3...]<

访问数组

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

array[下标数字] 

下面的是Typescript访问数组

/**
 * 声明数组 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

/**
 * 声明数组 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 

***数组遍历方法

数组遍历方法 

for for(let i=0;i

for of for(let item of array)

for in for(let item in array)

forEach 遍历

map遍历

多维数组

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

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

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

语法:[][]

let twoarrs : string[][]
let twoarrs : Array<Array<string>>

元组

元组概念:

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

***元组的特点: 6点

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

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

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

2.循环遍历访问

TypeScript元组文件代码:

/**
 * 
 * 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代码

/**
 *
 * 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:爱学习的学友,爱前端,爱前端,爱运营,爱推广,爱交朋友。

看完的兄弟记得点个赞呗,码了差不多7700多字,动动小手证明你的来过。学友兄会回访哦

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《TypeScript手册》是一本关于TypeScript语言的详细指南,它提供了对TypeScript的全面介绍和深入讲解。该手册通过易于理解的方式解释了如何使用TypeScript编写高质量的JavaScript代码,并利用TypeScript的特性来提高代码的可读性、可维护性和可扩展性。 《TypeScript手册》包含了各种主题,包括TypeScript的基础语法、变量和类型声明、函数和类、模块化编程、泛型、装饰器等。每个主题都有详细的解释和示例代码,以帮助读者更好地理解和应用所学知识。 该手册还介绍了TypeScript的类型系统,它可以帮助开发者在编写代码时更好地捕捉潜在的错误,并提供了更好的智能代码补全和重构功能。通过合理地使用类型注解和类型推断,开发者可以更轻松地进行代码重构和维护,减少代码错误和调试时间。 此外,该手册还介绍了如何配置TypeScript编译器和使用构建工具来实现自动化构建和部署。它提供了一些常见的TypeScript工具和框架的使用示例,如React、Angular、Node.js等,帮助开发者更快速地上手这些流行的技术栈。 总之,《TypeScript手册》是一本非常有价值的学习资料,无论是初学者还是有一定经验的开发者,都可以从获益。通过学习和实践,开发者可以更好地理解TypeScript语言的特点和优势,并能够更高效地使用TypeScript来开发高质量的应用程序。 ### 回答2: 《TypeScript Handbook》(TypeScript 手册)是一本面向 TypeScript 编程语言的权威指南。该手册详细介绍了 TypeScript 的语法、特性和用法,旨在帮助开发者更好地理解和应用 TypeScript。 手册的内容主要分为以下几个部分: 1. 基础类型:介绍 TypeScript 的基本数据类型,如数字、字符串、布尔等,以及数组元组等复合类型。同时还包括了联合类型、交叉类型、类型断言等重要概念。 2. 变量声明:详细说明了在 TypeScript 如何声明变量、常量和函数,并且介绍了变量作用域、闭包、箭头函数等相关知识。 3. 接口和类:深入讲解了 TypeScript 的接口和类的定义和使用方法,包括类的继承、实现接口、抽象类等高级特性。 4. 函数和泛型:介绍了函数的定义和调用方式,并且讲解了 TypeScript 的泛型的概念及应用,提供了一些常见的泛型示例。 5. 类型推断和类型兼容性:探讨 TypeScript 的类型推断机制,以及类型兼容性规则,帮助开发者更好地理解编译器对类型的推导和检查。 6. 模块:讲解了 TypeScript 的模块化开发,详细介绍了模块的导入和导出、命名空间的使用等相关内容。 7. 高级类型:介绍了一些 TypeScript 的高级类型,包括交叉类型、联合类型、索引类型、映射类型等,帮助开发者灵活地处理复杂的数据结构。 除了以上内容,手册还附带有一些示例代码和实用的技巧,帮助开发者快速上手并提升编程技能。 总而言之,《TypeScript Handbook》是一本详尽而全面的 TypeScript 参考指南,无论是初学者还是有经验的开发者,都可以通过阅读本手册来更好地理解和应用 TypeScript,提升代码质量和开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值