split()、splice()、reduce()和reduceRight()

split()

这个方法会根据传入的分隔符将字符串拆分成数组。作为分隔符的参数可以是RegExp对象。(字符串分隔符不会被这个方法当成正则表达式。)还可以传入第二个参数,即数组大小,确保返回的数组不会超过指定大小。来看下面的例子:

let colorText = "red,blue,green,yellow";

let colors1 = colorText.split(",");  // ['red', 'blue', 'green', 'yellow']
let colors2 = colorText.split(",",2);  // ["red","blue"]
let colors3 = colorText.split(/[^,]+/);  // ["", ",", ",", ",", ""] 数组前后包含两个空字符串,是因为正则表达式指定的分隔符出现在了字符串开头(“red”)和末尾(“yellow”)。

splice()

splice()的主要目的是在数组中间插入元素,有3中不同的方式使用这个方法。

1.删除。
需要给splice()传2个参数:要删除的第一个元素的位置和要删除的元素数量。可以从数组中删除任意多个元素,比如splice(0,2)会删除前两个元素。

2.插入。
需要给splice()传3个参数:开始位置、0(要删除的元素的数量)和要插入的元素,可以在数组中指定的位置插入元素。第三个参数之后还可以传第四个、第五个参数,乃至任意多个要插入的元素。比如,splice(2,0,“red”,“green”)会从数组位置2开始插入字符串"red"和"green"。

3.替换。
splice()在删除元素的同时可以在指定位置插入新元素,同样要传入3个参数:开始位置、要删除元素的数量和要插入的任意多个元素。要插入的元素数量不一定跟删除得到元素数量一致。比如:splice(2,1,“red”,“green”)会在位置2删除一个元素,然后从该位置开始向数组中插入"red"和"green"。

splice()方法始终返回这样一个数组,它包含从数组中被删除的元素(如果没有删除元素,则返回空数组)。以下示例展示了上述3种使用方式。

let colors = ["red","green","blue"];
let removed = colors.splice(0,1); //删除第一项
alert(colors); // green,blue
alert(removed); //red,只有一个元素的数组

removed = colors.splice(1,0,"yellow","orange"); // 在位置1插入两个元素
alert(colors); // green,yellow,orange,blue
alert(removed); // 空数组

removed = colors.splice(1,1,"red","purple"); // 插入两个值,删除一个元素
alert(colors); // green,red,purple,orange,blue
alert(removed); // yellow,只有一个元素的数组

归并方法:reduce()和reduceRight()

ECMAScript为数组提供了两个归并方法:reduce()和reduceRight()。

这两个方法都会迭代数组的所有项,并在此基础上构建一个最终返回值。

reduce()方法从数组第一项开始遍历到最后一项。而reduceRight()从最后一项开始遍历至第一项。

这两个方法都接收两个参数:对每一项都会运行的归并函数,以及可选的以之为归并起点的初始值。

传给reduce()和reduceRight()的函数接收4个参数:上一个归并值、当前项、当前项的索引和数组本身。这个函数返回的任何值都会作为下一次调用同一个函数的第一个参数。如果没有给这两个方法传入可选的第二个参数(作为归并起点值),则第一次迭代将从数组的第二项开始,因此传给归并函数的第一个参数是数组的第一项,第二个参数是数组的第二项。

可以使用reduce()函数执行累加数组中所有数值的操作,比如:

let values = [1,2,3,4,5];
let sum = values.reduce((prev,cur,index,array)=>prev + cur);

alert(sum);  //15

第一次执行归并函数时,prev是1,cur是2。第二次执行时,prev是3 (1+2),cur是3(数组第三项)。如此递进,直到把所有项都遍历一次,最后返回归并结果。

reduceRight()方法与之类似,只是方向相反。来看下面的例子:

let values = [1,2,3,4,5];
let sum = values.reduceRight(function(prev,cur,index,array){
		return	prev + cur;
	});

alert(sum);  //15

在这里,第一次调用归并函数时prev是5,而cur是4。当然,最终结果相同,因为归并操作都是简单的加法。
究竟是使用reduce()还是reduceRight(),只取决于遍历数组元素的方向。除此之外,这两个方法没什么区别。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值