数组应该是每个语言中都用得极度频繁的数据类型,JavaScript也不例外。

个人认为,Js中的Array类型非常强大。

首先没有C/C++等语言需要在数组初始化时指定数组长度(并不可变)的要求。

也不需要指定特定的基本数据类型(Number,String,Boolean,Null,Undefined,Object),也就意味着,一个数组中可以存多种数据类型的值。

我想总结一下Array的常用方法,在这之前,先介绍一下Array的基本用法:

基本用法:

1、创建数组:

//创建空数组
var arr = [];
var arr = new Array(); //创建一个指定长度的数组(没有多大意义,因为长度可变)
var arr = new Array(10); //创建一个带初始值的数组
var arr = ["ling", "jia", "wen", 18];
var arr = new Array("ling", "jia", "wen", 18);

2、数组的基本操作:

//数组基于0开始数字索引取值
console.log(arr[2]); // >"wen"
console.log(arr[4]); // >undefined //获取数组长度
console.log(arr.length); //>4 //改变数组长度
arr.length = 3;
console.log(arr[3]); //undefined(本来应该输出18) //巧妙利用数组长度添加元素
arr[arr.length] = "man";
console.log(arr[4]) // >man
//利用push方法添加元素
arr.push("arr")
console.log(arr) //> ling,jia,wen,18,man,arr

3、数组与字符串转换:

1) 数组转为字符串类型:

arr1 = arr.toString();      // "ling,jia,wen,18"
arr2 = arr.join("-"); // "ling-jia-wen-18"

2)  字符串转数组:

var str = "ling,jia,wen,2017";
var arr = str.split(","); //["ling", "jia", "wen", "2017"]
arr[3] = arr[3].parseInt(); //["ling", "jia", "wen", 2017]

push、pop、shift、unshift方法

1、基本用法:

    push() 末尾插入

    pop()   末尾删除

    shift()   首项删除

    unshift() 首项插入

arr.push("man")      // ["ling", "jia", "wen", 18, "man"]
arr.pop() // ["ling", "jia", "wen", 18]
arr.shift() // ["jia", "wen", 18]
arr.unshift("hello") // ["hello", "jia", "wen", 18]

2、模拟数据结构:

模拟栈(先进先出):

push():入栈

pop():出栈

模拟队列(先进后出):

正向队列:

push():进队列

shift(): 出队列

反向队列:

unshift(): 进队列

pop(): 出队列

splice方法

这个方法特别强大,不得不单独拿出来说说;它可以巧妙地对数组进行删除、插入和替换

怎么做到的呢?

这个方法可以理解为接收三个参数:起始位置、删除项数、插入项内容

(在这里我把所有的插入项内容当做一个参数,实际上可能是多个参数)

理解这三个参数至关重要。理解了,便可以实现删除、插入和替换操作。

请看下面的例子:

var arr = ["ling", "jia", "wen", 18]
//实现删除操作
// 从第1项开始,删除2项 arr-> [ "wen", 18]
// remove:["ling", "jia"]
// 也就是说,它会返回你删除的项,这个几乎没有在别人的博客中看到,不明白为什么??
var remove = arr.splice(0,2) //实现插入操作
//从第1项开始,删除0项,插入项为"hello"和"world"
// arr->["hello", "world", "wen", 18]
arr.splice(0,0,"hello", "world") //实现替换操作
//从第2项开始,删除1项,插入1项
//arr->["hello", "jia", "wen", 18]
arr.splice(1, 1, "jia")

代码写的很清楚了

删除时,不插入任何东西,也就是省略第三个参数;

插入时将删除项设为0即可;

替换时,只要删除项和插入项数目相同便实现了替换;

迭代方法

array数组有5个迭代方法。他们接受两个参数:

1、每一次迭代运行的函数(该函数接受三个参数:数组当前项的值、数组当前项的索引、数组本身

2、函数的作用域对象(可省略)

every()


对于数组的每一项,执行给定函数,如果该函数对每一项都返回true,则该方法返回true

栗子:

var numbers = [1,1,1,2,1,1,1];
var everyNum = numbers.every(function(item, index, array){
return (item === 1);
});
console.log(everyNum); //false var numbers1 = [1,1,1,1,1,1,1];
var everyNum = numbers1.every(function(item, index, array){
return (item === 1);
});
console.log(everyNum); //true

some()

some方法和every方法对应,两者的关系就如同orand

对于数组的每一项,执行给定函数,如果该函数对有任意一项返回true,则该方法返回true

栗子:

var numbers = [1,1,1,2,1,1,1];
var everyNum = numbers.some(function(item, index, array){
return (item === 2);
});
console.log(everyNum); //true

filter()

对于数组的每一项,执行给定函数,如果该函数有些项返回true,则该方法返回true的项重新组成的数组(有点绕)

直接上栗子更好理解:

var numbers = [1,2,3,4,5,6,7,8,0];
var filterNum = numbers.filter(function(item, index, array){
return (item >= 4);
});
console.log(filterNum); //[4,5,6,7,8]

这个方法用于数组的条件查询在合适不过。

forEach()

这个迭代器相信大家都不陌生,就是单纯地枚举,然后dosomething();

// 2  4  6  8
var numbers = [1,2,3,4];
numbers.forEach(function(item, index, array){
console.log(item*2);
});

map()

对于数组的每一项,执行给定函数,返回函数调用结果重新组成的数组

栗子:

//[2, 4, 6, 8]
var numbers = [1,2,3,4];
var mapNum = numbers.map(function(item, index, array){
return item*2;
});
console.log(mapNum);

OK,我所了解和能想起来的Array里面就差不多这么多了,有什么遗漏的欢迎补充!

JavaScript入门之数组:Array类型详解的更多相关文章

  1. JavaScript中数组Array方法详解

    ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的. 1.Array.join()方法 Array.join()方 ...

  2. JavaScript中的Array类型详解

    与其他语言中的数组的区别: 1.JavaScript数组的每一项都可以保存任何类型的数据,一个数组的数组元素可以是不同类型的数据. 2.数组的大小是动态调整的,可以随着数据的添加自动的增长. 1.两种 ...

  3. js课程 1-3 Javascript变量类型详解

    js课程 1-3  Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...

  4. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

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

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

  6. js变量类型详解

    <html> <title>js变量类型详解</title> <meta http-equiv="content-type" conten ...

  7. JavaScript进阶知识点——函数和对象详解

    JavaScript进阶知识点--函数和对象详解 我们在上期内容中学习了JavaScript的基本知识点,今天让我们更加深入地了解JavaScript JavaScript函数 JavaScript函 ...

  8. javascript event(事件对象)详解

    javascript event(事件对象)详解   1. 事件对象     1. 事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什 ...

  9. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

随机推荐

  1. Pycharm直接连接Github

    Pycharm可以说是使用Python语言开发者的必备利器.高校学生有学生邮箱就可以免费使用,着实省了我不少银两.附个license图: Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很 ...

  2. 最小的 Velocity 教程

    工作以后,我越来越能体会到80/20法则的强大. 这是一个不可否认的事实,常用 20% 的技术可以解决工作中 80% 的场景. 所以我希望能介绍给你 Velocity 技术 20%,帮助你胜任 80% ...

  3. MyBatis源码解析【1】准备工作

    终于迎来了这一天,我觉得现在的我在经历了长时间的学习和开发之后有了一定的经验,所以准备开始学习源码. 今天我将做好充足的准备,在接下来的一个月中,努力的爬过这座大山.(可能不用一个月,但是我觉得需要仔 ...

  4. Angular路由(三)

    AngularJs ng-route路由详解 其实主要是$routeProvider搭配ng-view实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 前提 首先必须在 ...

  5. Linux之虚拟机网络配置

    一般安装完虚拟机后,VMware会为虚拟机在网络连接配置为“NAT模式(N):用于共享主机的IP地址”. 这种模式下虚拟机会共享主机的网络环境,主机可以访问外网那么虚拟机可以,主机可以(哪怕是拨VPN ...

  6. Java的数据类型和参数传递

    Java提供的数据类型主要分为两大类:基本数据类型和引用数据类型. Java中的基本数据类型 名称 大小 取值范围 byte型 (字节) 8bit -128-127  (-2^7到2^7-1) sho ...

  7. Chrome浏览器扩展开发系列之三:Google Chrome浏览器扩展的架构

    1) 不可视的background页面 Google Chrome扩展往往包含一个不可见的background页面,Google Chrome扩展的主要业务逻辑都位于此.有两种类型的backgroun ...

  8. jsp实现上一页下一页翻页功能

    前段时间一直忙于期末考试和找实习,好久没写博客了. 这段时间做了个小项目,包含了翻页和富文本编辑器Ueditor的两个知识点,Ueditor玩的还不是很深,打算玩深后再写篇博客. 要实现翻页功能,只需 ...

  9. CJOJ 2044 【一本通】最长公共子序列(动态规划)

    CJOJ 2044 [一本通]最长公共子序列(动态规划) Description 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X,则另一序列Z是X的子序列是指存在一个 ...

  10. jvm007 jvm知识点总览

    转载来自:http://www.ityouknow.com/ 在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内 ...