Array 对象是一个复合类型,用于在单个的变量中存储多个值,每个值类型可以不同。

创建数组对象的方法:

  1. new Array();
  2. new Array(size);
  3. new Array(element0, element1, ..., elementn);
  1. 1. 当索引值为负数时,会将其看作是对象的一个属性,若为非负的数字字符串,则会隐式转换为数字索引:
  1. var a= new Array();
  2. a[-1.23]=true;
  3. a[1]="pomelo";
  4. a["100"]="tt";
  5. console.log(a); /// [1: "pomelo", 100: "tt", -1.23: true]
  6. console.log(a.length) /// 101 稀疏数组的长度为最大下标+1

其实数组对象的索引其实就是对象属性名的一种特殊形式,当试图查询任何不存在的对象属性名时,不会报错,而会显示undefined:

  1. console.log(a["hello"]); //undefined

2.  length属性可以用于置空数组或从前向后截取数组:

  1. var array1=[1,2,3,4,5];
  2. array1.length=3; ///[1,2,3]
  3. array1.length=0; ///[]
  4. array1.length=5; ///[] 长度为5的空数组
  5. console.log(array1)

可以使用Object.defineProperty(对象,属性名,{设置})方法设置可读可写:

  1. Object.defineProperty(array1,"length",{writable:false});
  2. array1.length=10;
  3. console.log(array1.length); ///5

3.数组元素的添加和删除:

末尾:添加元素push(),删除元素pop();

首部:添加元素unshift(),删除元素shift();

  1. var array2=[1,2,3,4,5];
  2. array2.unshift(6); ///[6,1,2,3,4,5]
  3. array2.shift(); //[1,2,3,4,5]
  4. console.log(array2);

4.数组的遍历优化与筛选

当数组容量很大时,length不应在每次循环中都查询;

当需要过滤数组中的无效数据时,用continue跳出本次循环;

  1. var array3=[null,1,0,undefined];
    for(var i= 0,len=array3.length;i<len;i++){
    if(!array3[i]) continue;
    console.log(array3[i]); //1
    }

或者利用ES5自带的foreach()方法:

  1. var array4=[1,2,3,4];
  2. var sum=0;
  3. array4.forEach(function(i){
  4. sum+=i;
  5. });
  6. console.log(sum); ///10

5.js不支持多维数组,但可以通过数组的数组来实现:

  1. var array5=new Array(10);
  2. for(var i=0;i<array5.length;i++){
  3. array5[i]=new Array(10);
  4. }
  5. for(var i=0;i<array5.length;i++){
  6. for(var j=0;j<array5[i].length;j++){
  7. array5[i][j]=i*j;
  8. }
  9. }
  10. console.log(array5[5][6]); //

6.数组方法

6.1   join()  将数组转化为字符串并连接在一起

  1. var array6=[1,2,3];
  2. console.log(array6.join("-")); // 1*2*3
  3. console.log(array6.join("")); //
  4. console.log(array6.join()); // 1,2,3
  5. console.log(typeof array6.join()); // String

6.2   reverse() 在原数组本身基础上将元素顺序颠倒

  1. var array7=[1,2,3];
    console.log(array7.reverse()) //[3,2,1]

6.3  sort() 数组排序

  1. var array8=["apple","cherry","cherry"];
  2. console.log(array8.sort()); //["apple", "cherry", "cherry"]
  3. array8.push(undefined);
  4. console.log(array8.sort()); //undefined会被放到最后 ["apple", "cherry", "cherry", undefined]

若想改变排序规则,需要传入一个比较函数:

  1. var array9=[33,4,11,222];
  2. console.log(array9.sort()); //11,222,33,4 默认以第一个数字比较
  3. console.log(array9.sort(function(a,b){ //从小到大排列
  4. return a-b;
  5. }))

字符排序默认区分大小小,以首字母ASCII编码为根据,从小到达排序:

  1. var array10=["ant","Boy","cat","Dog"];
  2. console.log(array10.sort()); //["Boy", "Dog", "ant", "cat"]
  3. console.log(
  4. array10.sort(function(s,t){
  5. var a= s.toLowerCase();
  6. var b= t.toLowerCase();
  7. if(a<b) return -1;
  8. if(a>b) return 1;
  9. return 0;
  10. })
  11. ); // ["ant", "Boy", "cat", "Dog"]

6.4 concat() 数组连接

  1. var array11=[1,2,3];
  2. console.log(array11.concat(4,5)); //[1,2,3,4,5]
  3. console.log(array11.concat([4,5])); //[1,2,3,4,5]
  4. console.log(array11.concat("4",[5,[6,[7,8]]])) //[1, 2, 3, "4", 5, Array[2]]

6.5  slice(第一个位置,第二个位置)

返回从第一个位置(包括)到第二个位置的子数组;

如果只制定一个参数,则返回从指定位置到数组结尾的所有元素组成的子数组;

若参数出现负数,则标识从后往前数的位置下标;

  1. var array12=[1,2,3,4,5];
  2. console.log(array12.slice(0,3)); //[1,2,3]
  3. console.log(array12.slice(3)); //[4,5]
  4. console.log(array12.slice(-1)); //[5]
  5. console.log(array12.slice(1,-1)); //[2,3,4]

6.6  splice(插入或删除的起始位置,删除元素的个数) 在数组中插入、删除或替换元素的通用方法:

  1. var array13=[1,2,3,4,5,6,7,8];
  2. //删除
  3. console.log(array13.splice(4)); //[5,6,7,8]
  4. console.log(array13); //[1,2,3,4]
  5. console.log(array13.splice(1,2)); //[2,3]
  6. console.log(array13); // [1,4]
  7. //插入
  8. array13.splice(1,0,"pomelo");
  9. console.log(array13); //[1, "pomelo", 4]
  10. //替换
  11. var array14=[1,2,3,4,5];
  12. array14.splice(2,1,"pomelo"); //[1, 2, "pomelo", 4, 5]
  13. console.log(array14)

6.7  map() 将调用此函数的数组的每个元素传递给指定函数:

  1. var array15=[1,2,3];
  2. var array16=array15.map(function(i){
  3. return i*i;
  4. });
  5. console.log(array16) //[1,4,9]

6.8   filter() 返回调用此函数的数组的一个子集,传递的参数为返回布尔值的一个函数,该函数过滤并留下返回true的数组元素。

  1. var array17=[1,2,3,4,5];
  2. console.log(
  3. array17.filter(function(i){
  4. return i<3
  5. })
  6. ); //[1,2]

6.9  forEach()   用于遍历数组

  1. var array18=[1,2,3];
  2. var sum=0;
  3. array18.forEach(function(i){
  4. sum+=i*i;
  5. });
  6. console.log(sum); //

6.10 every(),some() 这两个函数用于对数组进行逻辑判定,返回true或false

  1. var array19=[1,2,3,4,5];
  2. console.log(array19.some(function(i){
  3. return i>3;
  4. })); ///true
  5. console.log(array19.every(function(i){
  6. return i>3;
  7. })); ///false

6.11  reduce(化简操作的函数,传递给函数的初始值)和reduceRight(化简操作的函数,传递给函数的初始值) 化简函数

  1. var array20=[1,2,3,4,5];
  2. var sum= array20.reduce(function(x,y){return x+y},0);// 15 函数求和
  3. var mult=array20.reduce(function(x,y){return x*y}); //120 求积
  4. var max=array20.reduce(function(x,y){return x>y?x:y}); //5 最大值

reduceRight()与reduce()一样,只是按照数组索引从大到小的顺序

  1. var array21=[2,3,2];
  2. var result=array21.reduceRight(function(x,y){return Math.pow(y,x)});
  3. console.log(result); //512 求2^(3^2)

6.12 indexOf()和lastIndexOf()正向和反向搜索是否存在指定值,若存在返回索引下标,不存在则返回-1;

  1. var array21=[1,2,3,"pomelo",2,4,6];
  2. console.log(array21.indexOf(3)); //
  3. console.log(array21.indexOf(5)); //-1
  4. console.log(array21.lastIndexOf(2)); //

喜欢请点击右下角推荐,如有疑问可以留言,转载请标明出处。

javascript数组详解(js数组深度解析)【forEach(),every(),map(),filter(),reduce()】的更多相关文章

  1. JavaScript进阶(十)Array 数组详解

    JS array 数组详解 数组的声明方法 arrayObj = new Array(); 的数组 ,并且第一位是5 数组的运算(传地址) var t2=new Array(); t2[0]=1; t ...

  2. 3.awk数组详解及企业实战案例

    awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...

  3. (转)awk数组详解及企业实战案例

    awk数组详解及企业实战案例 原文:http://www.cnblogs.com/hackerer/p/5365967.html#_label03.打印数组:1. [root@nfs-server t ...

  4. [转]javascript console 函数详解 js开发调试的利器

    javascript console 函数详解 js开发调试的利器   分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...

  5. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  6. “全栈2019”Java第三十一章:二维数组和多维数组详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第三十章:数组详解(下篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第二十九章:数组详解(中篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第二十八章:数组详解(上篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 蓝桥网试题 java 算法训练 区间k大数查询

    -------------------------------------------------------------------------- 数组也有sort方法 尽量把输入和操作分开写 -- ...

  2. WPScan初体验

    近日在朋友圈看某位dalao在Ubuntu上安装WPScan花了一个小时,于是洒家随手在Kali Linux上输入了wpscan,发现Kali里面已经装好了.于是决定玩两把WPScan. WordPr ...

  3. 64位win2003 IIS6运行32位的.NET程序

    做web服务迁移,从32位win2003迁移到64位win2003,数据库是32位Oracle在另外一台服务器上. 迁移之后数据库各种连不上,oracle的客户端32位的装完装64位的,odp.net ...

  4. JS作用域理解

    1.JS解析步骤: a.预解析 将变量声明提升: 将函数声明及函数内容提升,可以理解成原来位置的函数在解析代码时已经提到代码初始位置: 遇到重名,只留下一个: 如有重名变量和函数,留下函数: 如有两个 ...

  5. linux下php开发环境搭建(nginx+php+mysql)

    安装前准备工作 先安装一些必要的类库 yum install -y wget  zlib-devel bzip2-devel  curl-devel openssl openssl-devel vim ...

  6. Ansible详解(二)

    Ansible系列命令 Ansible系列命令有如下: ansible:这个命令是日常工作中使用率非常高的命令之一,主要用于临时一次性操作: ansible-doc:是Ansible模块文档说明,针对 ...

  7. storm 1.0版本滑动窗口的实现及原理

    滑动窗口在监控和统计应用的场景比较广泛,比如每隔一段时间(10s)统计最近30s的请求量或者异常次数,根据请求或者异常次数采取相应措施.在storm1.0版本之前,没有提供关于滑动窗口的实现,需要开发 ...

  8. Hibernate一对一主键映射

    Hibernate一对一主键映射                        ------------------------------                            -- ...

  9. 关于Response.redirect和Response.End出现线程中止异常的处理

    最近做了一个项目其中使用了多线程获取POST过来的数据后再Response回复,但由于是多线程,在Response.End()的时候报出了异常: 2013-10-20 10:05:31,606 res ...

  10. Convert Sorted Array to Binary Search Tree & Convert Sorted List to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Su ...