ES5+ 的数组相关API

本文总结了ES5和ES6中数组的各种方法,包括静态方法和原型方法。详细介绍了每种方法的功能及用法,并通过示例代码展示了部分方法的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

数组的API在日常开发中,经常会用到。梳理下,当作复习。

 

ES5 

//静态方法
//判断是否是数组
Array.isArray  

//原型方法
//移除数组最后一项,  并将它返回
Array.prototype.pop

//在数组末尾添加一项,返回添加后新数组的长度
Array.prototype.push

//移除数组开头一项,并将它返回
Array.prototype.shift

//在数组开头添加一项,返回添加后新数组的长度
Array.prototype.unshift

//反转数组,并返回反转后的数组。
Array.prototype.reverse

//基于当前数组创建新数组
//两个参数,从第一个参数开始,到第二个参数之前
//如果不传参数,就是复制数组,不过只能用于非引用类型的深复制
//如果不传第二个参数,就从第一个参数开始,到数组结束。
//如果参数为负数,就从数组末尾开始数
Array.prototype.slice

//合并数组,参数可以任意个,可以是任意值。返回新数组
//参数可以是多个数组
Array.prototype.concat

//判断参数是否存在于数组中,如果存在,返回元素的索引,如果不存在返回-1.
//第二个参数,表示从哪个索引开始检索
Array.prototype.indexOf

//类似indexOf,只不过是从数组末尾开始检索
Array.prototype.lastIndexOf

//数组排序
//没有深入了解,猜测内部是用的双重for循环。
Array.prototype.sort

//可用于数组的增,删,改,很灵活。
//从第一个参数的位置开始操作,第二个参数表示删除多少个
//后续的参数,数组会以第一个参数作为开始的位置,逐个添加进数组中。
//返回值为一个包含被删除项的数组
Array.prototype.splice
var a= [1,2,3];
a.splice(a.length, 0, 4);  //增, 类似 push 方法
a.splice(0, 1);  //删,表示从索引0开始,删除1个。类似 shift 方法
a.splice(1, 1, 'change');  //改, 可以理解成替换

 

ES5 迭代器方法

//对数组的每一项都运行给定的函数,每一项都返回true,则返回true
//第一个参数为callback,callback的内部参数为,item, index, array
//第二个参数为callback运行时使用的this值
Array.prototype.every

//对数组的每一项都运行给定的函数,任意一项返回 ture,则返回 true
//第一个参数为callback,callback的内部参数为,item, index, array
//第二个参数为callback运行时使用的this值
Array.prototype.some

//对数组的每一项都运行给定的函数,返回结果为true的项组成的数组
//第一个参数为callback,callback的内部参数为,item, index, array
//第二个参数为callback运行时使用的this值
Array.prototype.filter

//对数组的每一项都运行给定的函数,返回每次函数调用的结果组成的数组
//第一个参数为callback,callback的内部参数为,item, index, array
//第二个参数为callback运行时使用的this值
Array.prototype.map

//遍历数组。对数组的每一项都运行给定的函数,只运行,返回undefined。不能break。
//第一个参数为callback,callback的内部参数为,item, index, array
//第二个参数为callback运行时使用的this值
Array.prototype.forEach

//累加器。从左到右对数组的每一项都运行给定的函数,并将其减少单一个值
//第一个参数为callback, callback的内部参数为,accumulator,item, index, array
//accumulator 表示上一次调用callback时返回的返回值
//第二个参数表示初始值,用作第一次调用callback时,第一个参数的值。如果没有定义,则将使用数组中的第一个元素。
Array.prototype.reduce

//同reduce, 方向是从右到左
Array.prototype.reduceRight

 

ES5迭代器方法的一些日常应用。适用于函数式编程。

//年龄数组
const ageArr = [15, 16, 17, 18, 19, 20, 21, 22, 23];

//他们是不是都大于18岁?
function greatterThan18(item, index, array) {
    return item > 18;
}

//是否有到了法定结婚年龄的
function greatterThan22(item, index, array) {
    return item >= 22
}

//过滤出到了法定结婚年龄的值
function ageCanMarry(item, index, array) {
    return item >= 22;
}

//过了一年了,让他们都长一岁
function addOne(item, index, array) {
    return item + 1;      
}

//计算下年龄总和
function getAgeTotal(accumulator, item, index, array){
    return accumulator + item;
}

let isAllGreatterThan18 = ageArr.every(greatterThan18);
let hasGreatterThan22 = ageArr.some(greatterThan22);
let getItemCanMarry = ageArr.filter(ageCanMarry);
let ageAdd = ageArr.map(addOne);
let ageTotal = ageArr.reduce(getAgeTotal, 0);

 

ES6

//静态方法
//将类数组(array-like object)和可遍历(iterable)的对象转为真正的数组
//我们就不用 [].slice.call(arrayLike) 了
Array.from

//将一组数据转为数组
//Array.of(1,2,3)  ->  [1,2,3]
Array.of

//原型方法
//没有仔细了解
Array.prototype.copyWithin

//填充数组
//第二个参数表示从哪个位置开始,第三个参数表示到哪个位置之前结束。
//var a = Array(10); a.fill(1);
Array.prototype.fill

//找出第一个符合条件的数组元素,如果没有符合条件的元素,则返回undefined
//参数是一个callback, callback的内部参数是 item, index, array
Array.prototype.find

//找出第一个符合条件的数组元素的索引,如果没有符合条件的元素,则返回 -1。
//参数是一个callback, callback的内部参数是 item, index, array
Array.prototype.findIndex

//遍历数组,将数组的索引和值,生成一个键值对,并返回由所有键值对组成的遍历器对象, 可用 for...of 遍历
Array.prototype.entries

//遍历数组,返回一个由数组所有元素的索引组成的遍历器对象,可用 for...of 遍历
Array.prototype.keys

//遍历数组,返回一个由数组所有元素的值组成的遍历器对象,可用 for...of 遍历
Array.prototype.values

 

ES7

//原型方法
//判断数组中是否存在该元素, 返回值为 boolean 值, 用法与indexOf一样。
//与 indexOf 相比,优势就是可以判断 NaN
Array.prototype.includes

 

转载于:https://www.cnblogs.com/jkCaptain/p/8903008.html

### 如何在 Vue 中使用 TypeScript 定义一个包含对象的数组 在 Vue TypeScript 的组合中,可以通过接口(`interface`)来定义复杂的数据结构。对于包含对象的数组,可以先通过 `interface` 明确单个对象的属性及其类型,然后再将其应用于数组。 以下是具体实现方法: #### 使用 Interface 定义对象结构 首先,创建一个描述对象类型的接口。例如,假设我们需要存储用户的姓名年龄,则可以这样定义: ```typescript interface User { firstName: string; lastName: string; age: number; } ``` #### 定义包含对象的数组 接着,在组件的 `data()` 方法中返回该数组,并指定其类型为上述接口的数组形式: ```typescript export default class MyComponent extends Vue { users: User[] = [ { firstName: 'John', lastName: 'Doe', age: 30 }, { firstName: 'Jane', lastName: 'Smith', age: 25 } ]; } ``` 或者如果使用选项 API 风格编写组件,也可以如下所示设置数据类型: ```javascript <script lang="ts"> import { defineComponent } from 'vue'; interface User { firstName: string; lastName: string; age: number; } export default defineComponent({ data() { return { users: [] as User[] }; }, created() { this.users.push({ firstName: 'John', lastName: 'Doe', age: 30 }); this.users.push({ firstName: 'Jane', lastName: 'Smith', age: 25 }); } }); </script> ``` 以上代码片段展示了如何利用 TypeScript 提供更强的类型安全性[^1],从而减少运行时错误并提高开发体验。 #### 关于加载声明文件或配置 tsconfig.json 当项目依赖外部库时,请确保 TypeScript 能够找到对应的类型声明文件。这通常意味着需要安装相应的 @types 包或将路径添加到项目的 `tsconfig.json` 文件中的 `typeRoots` 字段[^2]。 另外值得注意的是,默认情况下 TypeScript 编译器会将目标环境设为 ES5 来兼容大多数浏览器;然而可以根据实际需求调整此参数至更高版本如 ES2018 等[^4]。 最后提醒一点,虽然这讨论的重点是如何定义带有对象的数组,但在构建大型应用过程中还可能涉及更多方面比如状态管理工具 Vuex 及其与表格渲染插件集成等情况下的实践细节[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值