javascript 数组迭代与归并

数组的5个迭代方法:

every(); //对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true;

filter(); //对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组;

forEach(); //对数组中的每一项运行给定函数,这个方法没有返回值;

map(); //对数组中的每一项运行给定函数,返回函数每次调用的结果组成的数组;

some(); //对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。

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

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

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

以map()为例:array1.map(callback[,thisArg])

array1:必需,一个数组对象

callbackfn:必需,一个接受最多三个参数的函数,对于数组中的每个元素,,map都会调用callbackfn一次

thisArg:可选,可在callbackfn中为其引用this关键字的对象,如果省略,则undefined将用作this的值。

[“1”,“2”,“3”].map(parseInt)的运行结果是------------[1,NaN,NaN]

parseInt 需要两个参数(val,radix),而map()传递了三个参数:(element,index,array)在这里map函数将数组的索引传递给了第二个参数。



荔枝:写一个函数,要求传入一个字符串,统计其中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(‘‘);
}

荔枝2: 返回数组中某一项的数量

//比如说var arr = [0,1,2,2,3];
arr.numberOfOccurrences(0) === 1;
arr.numberOfOccurrences(4) === 0;
arr.numberOfOccurrences(2) === 2;
arr.numberOfOccurrences("a") === 0;
//使用filter()解决:
Array.prototype.numberOfOccurrences = function(search) {
  return this.filter( function(num){ return search === num } ).length;
}

荔枝3:toWeirdCase()函数,接受一个字符串参数(英文字符,如“Weird string case”,“String”,若有多个单词则中间用一个空格隔开),这个函数要求输出一个字符串:其中的每个单词中位数为奇数的为大写,其余小写。

//#1
function toWeirdCase(string) {

    function singleWeird(e) {
        var word = e.split(‘‘);
        for (var i = 0; i < word.length; i += 2) {
            word[i] = word[i].toUpperCase();
        }
        return word.join(‘‘);
    }

    return string.split(‘ ‘).map(function (e) {
        return singleWeird(e);
    }).join(‘ ‘);
}

//#2
function toWeirdCase(string){
  return string.split(‘ ‘).map(function(word){
    return word.split(‘‘).map(function(letter, index){
      return index % 2 == 0 ? letter.toUpperCase() : letter.toLowerCase()
    }).join(‘‘);
  }).join(‘ ‘);
}

//#3:
function toWeirdCaseCharacter(chr, index)
{
  return index % 2 ? chr.toLowerCase() : chr.toUpperCase();
}

function toWeirdCaseWord(word){
  return word.split("").map(toWeirdCaseCharacter).join("");
}

function toWeirdCase(string){
  return string.split(" ").map(toWeirdCaseWord).join(" ");
}

//正则:
function toWeirdCase(string){
  return string.replace(/(\b(\S)*\b)/g, function(v,i){
    return v.split("").map(function(v, i) { return (i%2 == 0) ? v.toUpperCase(): v}).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;
  }, []);
};
时间: 2024-10-23 02:38:52

javascript 数组迭代与归并的相关文章

JavaScript数组的循环和迭代

JavaScript数组的循环和迭代 循环 for循环 普通版for循环 var arr = ["a","b","c","d"]; for (let i = 0; i < arr.length; i++){ console.log(arr[i]); .//a b c d } 优化版for循环 var arr = ["a","b","c","d"

Javascript数组的5种迭代方法

#Javascript数组的5种迭代方法 数组当中定义了5个迭代方法,传入这些方法中的函数会接受三个参数,数组项的值,该项在数组的位置,和数组对象本身,以下是5个迭代方法的作用. 1.every方法: 对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true. let arr1 = [1,2,3,4,5,6]; let arr2 = [-1,-2,-3,-4,-5,-6]; let every1 = arr1.every((item,index,arr)=>{ return

JavaScript 数组基本操作

简介 数组操作无论是在JavaScript中还是在其他语言中都是很常见.经常会用到的,现在我把JavaScript 数组基本操作整理一下,供大家参考学习.里边包含我自己的见解以及案例,希望能够帮助大家,使用的是ECMAScript 5. 字符串与数组转换 有时候我们需要把字符串进行转换为数组,则需要split方法,把数组转换为字符串则需要join方法 var star="js,php,java,c++"; star=star.split(","); console.

【javascript】JavaScript数组常用方法

JavaScript数组常用方法 一.数组创建 1.(1)使用Array创建数组: 1 var arr1 = new Array(); //创建一个空数组 2 var arr2 = new Array(10); // 创建一个包含10项的数组 3 var arr3 = new Array("a","b","c"); // 创建一个包含3个字符串的数组 (2)使用数组字面量表示法: 1 var arr4 = []; //创建一个空数组 2 var

javascript数组总结

数组是一个有序的集合,javascript数组中的元素的类型可以是任意的,同一个数组不同元素之间的类型也是可以不同的.数组也是对象,有个length属性,记录数组的长度. 创建数组有两种方法: 数组直接量,var arr = [1,2,];这样会创建一个有两个元素的数组.之所以不是3个元素,是因为最后一个逗号是可选的. 另外一种是调用构造函数:    var arr = new Array(10);这样会创建一个具有10个元素的数组:或者          var arr = new Array

JavaScript数组方法详解

JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中原型上的方法,本文举例介绍了从ES3到ES7几乎所有的数组方法.这大概是最全的数组方法详解了.希望读者能从中有所收获. 一.各版本数组方法一览表 数组方法名 对应版本 功能 原数组是否改变 pop() ES3- 删除最后一位,并返回删除的数据 是 push() ES3- 在最后一位新增一或多个数据,

JavaScript 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript

JavaScript数组遍历map()的原型扩展

在 JavaScript 1.6 里,javascript 数组增加了几个非常有用的方法:indexOf.lastIndexOf.every. filter. forEach. map. some,其中前两个可以归为元素定位方法,而后面的几个则可以归为迭代(iterative)方法. 遗憾的是:这些新方法并非所有浏览器都支持,在这种情况下,我们就需要自己动手了,在这些介绍的文章中,我们同时提供了在不支持这些新特性的浏览器中的实现方法. 原生方法如下: 1 var mappedArray = ar

javascript数组原型方法

1.javascript数组原型方法. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>jstest</title> 6 </head> 7 <body> 8 <script> 9 var arr = ["1","2&q