你的位置:首页 > Java教程

[Java教程]javascript 数组迭代与归并


数组的5个迭代方法:

every(); //对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true;filter(); //对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组;forEach(); //对数组中的每一项运行给定函数,这个方法没有返回值;map(); //对数组中的每一项运行给定函数,返回函数每次调用的结果组成的数组;some(); //对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。

*:以上方法都不会修改数组中包含的值!

每个方法都接受两个参数,要在每一项上运行的函数和运行该函数的作用域对象(可选、影响this的值)

传入的函数会接受三个参数:数组项的值、该项在数组中的位置以及数组对象本身。


 

 荔枝:写一个函数,要求传入一个字符串,统计其中a-z的字母(大小写均算),若字符串中存在这个英文字母,则在函数返回的长为26的字符串中的相应位置输出1(按a-z的顺序)比如说输入'a **& bZ',输出'11000000000000000000000001'【例子都是codewars上的- -解释能力不行说不太明白】

function change(string) { string = string.toLowerCase() return 'abcdefghijklmnopqrstuvwxyz'.split('').map(function (c) {   return string.indexOf(c) !== -1 ? 1 : 0; }).join('');}

 


 

ECMAScript5新增了两个归并数组的方法:reduce()和reduceRight()。这两个方法都会迭代数组的所有项,然后构建一个最终返回的值(对数组中的所有元素调用指定的回调函数。 该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。)。

其中reduce()从数组的第一项开始而reduceRight()则从最后一项开始往前遍历。

以reduce();为例:

array1.reduce(callbackfn[, initialValue])//array1:【必需】 一个数组对象//callbackfn:【必需】 一个接受最多四个参数的函数。 对于数组中的每个元素,reduce 方法都会调用 callbackfn 函数一次。//initialValue:【可选】 如果指定 initialValue,则它将用作初始值来启动累积。 第一次调用 callbackfn 函数会将此值作为参数而非数组值提供

//返回值:通过最后一次调用回调函数获得的累积结果。

//如果提供了 initialValue,则 reduce 方法会对数组中的每个元素调用一次 callbackfn 函数(按升序索引顺序)。 如果未提供 initialValue,则 reduce 方法会对从第二个元素//开始的每个元素调用 callbackfn 函数。(reduceRight()的处理顺序相反)

//回调函数的返回值在下一次调用回调函数时作为 previousValue 参数提供。 最后一次调用回调函数获得的返回值为 reduce 方法的返回值。

 


 

回调函数:function callbackfn(previousValue, currentValue, currentIndex, array1)//可使用最多四个参数来声明回调函数。
//【previousValue】:通过上一次调用回调函数获得的值。 如果向 reduce 方法提供initialValue,则在首次调用函数时,previousValue 为 initialValue。
//【currentValue】:当前数组元素的值。
//【currentIndex】:当前数组元素的数字索引。
//【array1】:包含该元素的数组对象。

在第一次调用回调函数时,作为参数提供的值取决于 reduce 方法是否具有 initialValue 参数。

如果向 reduce 方法提供 initialValue:

    • previousValue 参数为 initialValue。

    • currentValue 参数是数组中的第一个元素的值。

如果未提供 initialValue:

    • previousValue 参数是数组中的第一个元素的值。

    • currentValue 参数是数组中的第二个元素的值。


 

荔枝:向一个函数传入一个String,函数返回包含字符串中大写字母所在位置的数组:

var capitals = function (word) { return word.split('').reduce(function(memo, v, i) {  return v === v.toUpperCase() ? memo.concat(i) : memo; }, []);};

 

就看到这了,先写这些- -