Array类型也是ECMASCRIPT中最常见的数据类型,而且数据的每一项可以保存任何类型的数值,而且数组的大小是可以动态调整的,可以随着数据的添加自动增长以容纳新的数据。下面,总结数据的一些常用方法:

  1.创建数组

    1.1.使用Array构造函数

var arr=new Array(4); //创建一个包含3项的空数组
var arr2=new Array('red','blue','yellow'); //['red','blue','yellow']

    1.2.数组字面量创建

var arr3=[]; //[]
var arr4=['red','yellow']; //['red','yellow']
var arr5=[1,2,]; //[1,2,]

  2.读取和设置数组的值

    index数组的索引,即下标,当index<arr.length时,可以获取数组中的值,否则取到的值为undefined。

    通过设置数组的length,可以对数组的末尾移除或添加

var arr4=['red','yellow'];
console.log(
arr4[0],
arr4[2],
);
//red
//undefined
var arr4=['red','yellow'];
arr4.length=1;
console.log(arr4);
arr4.length=3;
console.log(arr4);
//["red"] 长度变为1
//["red", empty × 2] 长度变为3,后两项为空

var arr=[1,2,3];
  arr[10]=10;
  console.log(arr);
  //[1, 2, 3, empty × 7, 10] length为10中间的值为undefined

  小结:通过arr[arr.length-1]可以获取到数组的最后一项,通过arr[length]=item可以设置最后一项的值并动态增加了数组的长度

  3.数组的方法

    3.1.连接两个数组或多个数组-concat
      不改变原始数组,需要用新的变量保存返回的新数组

var arr1=[1,2];
var arr2=[2,3];
arr1.concat(arr2);
console.log(arr1,arr2);
var arr3=arr1.concat(arr2);
console.log(arr3); // [1, 2] (2) [2, 3]
// [1, 2, 2, 3]

    3.2.截取数组一部分-slice

    arr.slice(startIndex,endIndex);截取的项包括数组开始的索引的项,不包括数组结束的索引的项

    也不改变原始数组,需要用新的变量保存返回的新数组

var arr=[1,2,3];
arr.slice(0,1);
console.log(arr);
var sub=arr.slice(0,1);
console.log(sub);
// [1, 2, 3]
// [1]

    3.3用不同的分隔符构建字符串-join

    默认以','拼接,

var arr=[1,2,3];
var str1=arr.join();
var str2=arr.join("-");
console.log(str1,str2);
//1,2,3
//1-2-3 // 根据数组拼接成html字符串
var arr=["HTML","CSS","JS"];
var html='<li>'+arr.join('</li><li>')+'</li>';
console.log(html);
// HTML</li><li>CSS</li><li>JS</li>

    3.4.数组的反转-reverse

var arr=[1,2,3,4,5];
arr.reverse();
// [5, 4, 3, 2, 1]

    3.5.数组的排序-sort方法

    这里只是通过出入比较函数给sort方法来保持正确的排序,对象也可以根据某一属性来进行正确的排序,这里暂不赘述。

var arr=[1,2,11,5,50];
arr.sort();
// [1, 11, 2, 5, 50] 按照uicode编码排序不是我们想要的结果
通过传入比较函数保证正确的排序
arr.sort(function(a,b){
if(a<b){
return -1;
}else if(a>b){
return 1;
}else{
return 0;
}
})
// [1, 2, 5, 11, 50]

    3.6.数组的删除,替换,插入-splice方法

    array.splice(index,howmany,item1,.....,itemX);

// 删除开始索引后的第几个元素
var arr=[1,2,3,4,5];
arr.splice(1,1); //[1, 3, 4, 5] // 删除开始索引后的第几个元素然后插入新的值
var arr1=[1,2,3,4,5];
arr1.splice(1,2,11,22); // [1, 11, 22, 4, 5]

    3.7.栈方法
    数组提供了一种让数组类似于其他数据结构的方法,栈是一种LIFO(Last-In-First-Out)后进先出的数据结构,也就是最新添加的最早被移除。

    栈中的推入-push,接收任意变量的参数,把他们添加到数组的末尾,并返回修改后数组的长度

    栈中的弹出-pop,从数组末尾移除最后一项,减少length值,然后返回移除的项
    都发生在同一位置-栈的顶部。

var arr=[1,2,3];
arr.push('a'); //4 返回数组的长度
arr // [1, 2, 3, "a"] var arr=[1,2,3];
arr.pop(); //3 返回数组最后一项的弹出值
arr (3) [1, 2]

    3.8.队列方法

    队列的数据结构是FIFO(First-In-First-Out),队列在数组的末端添加项,在列表的前端移除项。

    末端添加项-push,

    前端移除项-shift,移除数组中的第一项,并返回该项,同时将数组长度减1,

    前端新增项-unshift,在数组前端新增一项并返回数组的新长度。

    通过数组的unshift和pop方法可以从相反方向的来模拟队列

var arr=[1,2,3];
arr.push(4) //
arr.shift(); //
arr; //[2,3,4]
arr.unshift("a"); //
arr; //["a",1,2,3]

    3.9.数组的位置方法-indexOf,lastIndexOf

    indexOf() 方法可返回数组中某个指定的元素位置。

    该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。如果在数组中没找到指定元素则返回 -1。

    lastIndexOf() 方法可返回数组中从尾到头方向上的位置,找到返回第一次出现的位置,否则返回-1。

var arr=[1,2,3,1,4];
arr.indexOf(1); //
arr.lastIndexOf(1); //

    3.10.数组的平铺(有些低版本浏览器不兼容)

     方法会递归到指定深度将所有子数组连接,并返回一个新数组。arr.flat(depth);默认深度为1

var arr=[1,2,3,[4,5],[7,8]];
var arr2=arr.flat(); //等价于arr.flat(1)
console.log(arr2);
// [1, 2, 3, 4, 5, 7, 8]

  4.数组的迭代方法

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

var numbers=[1,2,3,4,5];
var result=numbers.every(function(item,index,arr){
return item>2;
})
result //false

    4.2.some():对数组的每一项运行给定函数,如果该函数对任一项返回true,则返回true

var numbers=[1,2,3,4,5];
var result=numbers.some(function(item,index,arr){
return item>2;
})
result //false

    4.3.filter():对数组中每一项运行给定的函数,返回该函数会返回true的项组成新的数组

var numbers=[1,2,3,4,5];
var result=numbers.filter(function(item,index,arr){
return item>2;
});
result //[3, 4, 5]

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

var numbers=[1,2,3,4,5];
var result=numbers.map(function(item,index,arr){
return item*item;
});
result // [1, 4, 9, 16, 25]

    4.5.foreach():对数组中每一项运行给定函数,这个方法没有结果,与for循环迭代数组一样

眼过千遍,不如手写一遍,以上是对JavaScript数组常用API的一些总结,也是平常业务开发中会经常使用到的,如有不足,欢迎指正。


参考资料:

《JavaScript高级程序设计》

《菜鸟教程》

《MDN》

    

JavaScript引用类型之Array类型API详解的更多相关文章

  1. JavaScript引用类型之Array类型一

    一.简介 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了.下面就来分析ECMAScript中的数组与其他语言中的数组的异同性: 1.相同点: (1)他们都是数据的有序列 ...

  2. 【HANA系列】SAP HANA XS的JavaScript API详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS的Java ...

  3. 【HANA系列】【第五篇】SAP HANA XS的JavaScript API详解

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第五篇]SAP HANA XS ...

  4. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  5. 转: javascript模块加载框架seajs详解

    javascript模块加载框架seajs详解 SeaJS是一个遵循commonJS规范的javascript模块加载框架,可以实现javascript的模块化开发和模块化加载(模块可按需加载或全部加 ...

  6. Java8学习笔记(五)--Stream API详解[转]

    为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...

  7. DOM API详解

    来源于:http://zxc0328.github.io/2016/01/23/learning-dom-part1/ https://zxc0328.github.io/2016/01/26/lea ...

  8. JS类型转换规则详解

    JS类型转换规则详解 一.总结 一句话总结:JS强制类型转换中的类型名强制类型转换和其它语言不同,是类型类的构造方法,Number(mix) 一句话总结(JS类型本质):因为js是弱类型语言,所以它相 ...

  9. Java 8 Streams API 详解

    流式编程作为Java 8的亮点之一,是继Java 5之后对集合的再一次升级,可以说Java 8几大特性中,Streams API 是作为Java 函数式的主角来设计的,夸张的说,有了Streams A ...

随机推荐

  1. java之jsp实现动态网页

    动态页面,说白了,就是根据一定的信息(条件)去改变呈现给用户的内容. 而这里所提到的一定的信息,通常就是指,在一个表单中用户所输入的信息. 先来看一个我们常见的用户登录界面吧. 在这里我们可以看到一共 ...

  2. Rafy 开源贡献中心 - 组织成立,并试运行一月小结

    背景 最近两年,工作中虽然大量使用了 Rafy 框架作为各个产品.项目的开发框架.我是 2015 年的年中加入现在这家公司的,由于我个人工作太忙的缘故,一直没怎么编码,Rafy 框架底层的核心成长也比 ...

  3. SOFA 源码分析 — 自动故障剔除

    前言 集群中通常一个服务有多个服务提供者.其中部分服务提供者可能由于网络,配置,长时间 fullgc ,线程池满,硬件故障等导致长连接还存活但是程序已经无法正常响应.单机故障剔除功能会将这部分异常的服 ...

  4. SOFA 源码分析 — 扩展机制

    前言 我们在之前的文章中已经稍微了解过 SOFA 的扩展机制,我们也说过,一个好的框架,必然是易于扩展的.那么 SOFA 具体是怎么实现的呢? 一起来看看. 如何使用? 看官方的 demo: 1.定义 ...

  5. codeforces 983A Finite or not?

    题意: 判断一个分数在某一进制下是否为无限小数. 思路: 首先把这个分数约分,然后便是判断. 首先,一个分数是否为无限小数,与分子是无关的,只与分母有关. 然后,再来看看10进制的分数,可化为有限小数 ...

  6. PAT1021:Deepest Root

    1021. Deepest Root (25) 时间限制 1500 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A graph ...

  7. iPhone越狱

    手机越狱 常用工具:PP越狱助手.盘古越狱.iTunes 如果手机第一次越狱使用pp越狱助手成功率比较高 iPhone固件下载地址http://iphone.91.com/fw/iphone5/ 具体 ...

  8. SSM-Spring-10:Spring中cglib动态代理

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 何为动态代理,就不扯皮了,上一篇博客刚刚提到,那cglib动态代理又怎么写,我拿个和上个例子相似的案例来写 具 ...

  9. 《嵌入式Linux内存使用与性能优化》笔记

    这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相比,无论是技术层次还是更高的理论都有较大差距.但是这不影 ...

  10. VMware 非简易安装centos6(静态ip配置)

    1.选择新建虚拟机 在弹出框中我选择推荐安装 然后点击下一步 2.选择稍后安装操作系统(不然会默认简易安装) 接着一直下一步就可以了,最后到这个页面 4.如下图选择事先下载好的安装文件 5.配置桥接模 ...