JS对数组的处理(包含ES6)

JS有很多处理数组的方法,这些方法都是Array内置对象的方法。该文章是对这些方法的用途的总结,方便翻阅,并不提供具体使用示例。

众所周知,数组是引用类型,所以我把这些方法分为两类,一类是直接对原数组操作,会改变原数组的方法,另一类是返回一个副本,对这个副本的操作不会改变原数组的方法。另外,我把ES6新增方法放在后面列出来。

一、会改变原数组的方法

1.splice(index,num,addItem),第一个参数表示从哪里开始删除,第二个参数表示删除的个数,第三个参数表示添加的新内容,前两个参数是必须的,第三个参数可选。返回值为从原始数组中删除的项。不传参数时,会返回空数组。但是在vue中,有一个新用法,example1.items.splice(newLength),这个代码可以修改数组长度。

2.push()方法向数组末端添加元素,并返回修改后的数组长度。

3.pop()方法从数组末尾移除一项,并返回被移除的项。

4.shift()方法移除数组第一项,并返回该项。

5. unshift()方法向数组前端添加一项,并返回新数组的长度。

6.sort()方法,默认调用每个数组项的toString()方法,然后比较得到的字符串,无论什么类型的数组项,比较的都是字符串。

   还可以接收一个比较函数作为sort方法的参数,用来对数组元素进行排序。高级教程93页


二、不会改变原数组的方法

1.slice(start,end),第一个参数表示从哪里开始截取数组,第二个参数表示从哪里结束,返回数组为原数组从start到end-1的项。当start和end为负数时,表示从末尾计算的索引值,-1表示最后一个,以此类推。不传参数时,会返回原数组。借助 var otherArr = oneArr.slice();可以获得oneArr的一个副本,修改otherArr,不会改变oneArr。

2. concat(),数组的合并。

3.reverse(),数组成员的顺序反转,不会改变原数组,字符串不能“借用”这个方法(大部分数组方法,字符串可以通过call来借用,包括map、join)

4. indexOf,这本身是一个字符串方法,从ES5开始,数组支持该方法

5.五个迭代方法,forEach没有返回值;every和some查询数组中的项是否满足某个条件,返回布尔值;filter对原数组过滤;map返回对应于原数组的新数组。

①every(),对数组的每一项执行函数,对每一项都返回true时,该方法返回true,如果数组有空位,会忽略

②filter(),对数组的每一项执行函数,该方法返回结果为true的项(原数组中的项)组成的新数组。如果数组有空位,会忽略

③forEach(),对数组每一项执行函数,没有返回值。如果数组有空位,会忽略

④map(),对数组的每一项执行函数,返回值为执行函数的结果(不是原数组的项)组成的新数组。如果数组有空位,会忽略,但保留这个空位

⑤some(),对数组的每一项执行函数,对任意一项返回true,则该方法返回true。如果数组有空位,会忽略

6. reduce()和reduceRight()方法,这两个方法的区别只是从数组的哪一头开始遍历数组,其余一样。高级教程98页

7.join(),以传入的字符为间隔,连接数组每一项,返回为字符串,若有空位,视作undefined(undefined和null又会被当做空字符串)


ES6新增方法

1.Array.from(arrayLike,operateFun),该方法用来把类数组对象转换为数组,返回值为这个新数组,后续对新数组的操作不会改变原来的类数组对象

该方法可以把任何具有length属性的对象转化为数组,也就是说,arrayLike参数甚至可以接受字符串作为参数。

operate参数规定转换规则,类似于map方法的函数参数

2.Array.of(),该方法将一组值转换为数组,基本上可以替代数组的构造函数:new Array()或者 Array(),因为之前的数组构造函数,根据参数的个数不同,行为也不相同,在不同浏览器上表现出来的也有差异。Array.of()则直接返回参数值组成的数组。

3.find(fn,bindThis),findIndex(fn,bindThis),找出第一个符合条件的成员、成员位置

4.fill(value,start,end),将数组指定位置的元素填充为value,不传start,end,则全部填充,

5.copyWithin(target,start,end),将start到end的成员复制到target位置

console.log([1,2,3,4,5].copyWithin(3,2));//1,2,3,3,4



ES6(ECMAScript 6)引入了许多新的数据处理特性和语法,使得数组和对象的操作更加方便和高效。这里我们可以介绍几个常用的ES6数据处理练习: 1. **数组方法**: - `map()`:创建一个新的数组,对原数组中的每个元素应用一个函数。 - `filter()`:创建新数组,只包含通过指定测试的所有元素。 - `reduce()`:对数组中的所有元素执行一个由您提供的reducer函数,将其结果汇总为单个返回值。 - `find()` 和 `findIndex()`:查找数组中满足特定条件的第一个元素及其索引。 2. **解构赋值**: - 对象解构:`let { prop1, prop2 } = obj;` - 数组解构:`let [a, b] = [1, 2];` 3. **数组推导**(Array Comprehensions): - 新特性,虽然不是严格ES6,但可以用来简洁地创建新数组。 ```javascript let squared = [x ** 2 for (x of array)]; ``` 4. **扩展运算符(...)**: - `let newArray = [...oldArray, newElement];` 或 `function spreadArgs(...args) {}` - 用于合并数组或复制数组,以及将剩余参数传递给函数。 5. **Set和Map**: - Set存储唯一的值,不保证顺序。 - Map存储键值对,键无需是字符串,提供了更灵活的数据结构。 6. **模板字面量(Template literals)**: - 使用反引号(``)创建可嵌入表达式的字符串。 ```javascript let name = 'Alice'; let greeting = `Hello, ${name}!`; ``` 7. **数组方法的优化**:比如使用`Array.from()`创建新数组,避免不必要的拷贝。 8. **Array.observe()**(仅限于某些浏览器,已被弃用,但可以了解观察数组变化的思想)。 在实践中,你可以通过编写一些小的代码片段,如操作数组、转换数据格式、过滤数据等,来熟悉和巩固这些新特性的使用。同时,完成在线编程挑战或实际项目也是很好的学习方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值