在JavaScript中,对象,数组,函数是最最常用的东东了,写完了对象和函数,最后来说说数组吧,提到数组,就只能想到,map,forEach啊,pop,push啊,当真是没有一点点的积累了?这么多年程序媛当真是就只学会了for循环了,人生如此美妙,你却如此浅薄无知啊,可惜啊可惜!如果你当真认为是这样,你就是个笨蛋啦。废话不多说,干货走起!

首先,说下数组元素可以是任意类型的,索引是从零开始的,数组可能是稀疏的,即数组元素的索引不一定是要连续的哦,中间可以有空缺的呦。那么数组的length针对于稀疏数组,length大于所有元素个数的和。
数组呢,是对象的特殊形式,所以它的索引实际上和碰巧是整数的属性名差不多。但是,用数字索引来访问数组元素一般来说要比访问常规的对象属性要快很多。

数组继承自Array.prototype中的属性。
1,创建数组
这里说一种不常见的创建方式

var undefs = [,,]
undefined
undefs
(2) [empty × 2]
 var a = new Array();
var b = new Array(10);
var c = new Array(1,2,3,4,'thank you')

javascipt将指定的数字索引值转换成字符串----索引值1变成“1”,然后将其作为属性名来使用
var o = {};
o[1] = "one";

数组的特殊之处在于,根据需要更新他们的length属性值。
注意:可以使用负数或非整数来索引数组。事实上数组索引仅仅是对象属性名的一种特殊类型。
2,稀疏数组,length
即包含从0开始的不连续索引的数组。

var a = new Array(5);
a[1000] = 0;
0
a
(1001) [empty × 1000, 0]

length一个特殊之处在于,看下面的例子:

 var a = [1,2,3,4,5];
a.length = 3;
3
a
(3) [1, 2, 3]
a.length = 0
0
a
[]
a.length = 5
5
a
(5) [empty × 5]

3:数组的添加和删除

arr.push('one','two');//尾部插入

arr.unshift() //首部插入

delete a[1]   //删除操作不影响数组原来的长度,删除后原数组变成了稀疏数组。
pop()//尾部删除一个元素
shift()//头部删除一个元素

splice()  是一个通用的插入,删除,替换操作数组的方法。

4数组的遍历

常用for循环,不能用for/in循环去检测数组,因为for/in循环能够枚举继承的属性名,如添加到Array.prototype中的方法。除非用额外的检测方法来过滤不想要的属性。

5.数组的方法:

join(),reverse(),sort(),concat(),slice(),splice()
toString()
新的数组方法来遍历,映射,过滤,检测,简化和搜索数组。
every()和some()不总是访问每一个数组元素,如果有fasle就会尽早终止遍历。

 var a = [2,12,3,5,6];
a.forEach(function(v,i,a){a[i] = v+1})
a.map(function(x){return x*x});
a.filter(function(x){return x<3}) //返回的数组元素是调用的数组的一个子集。
a.every(function(x){return x<10}) //所有的值都<10
a.some(function(x){return x<10}) //存在有小于10的数就是true

重点来说说不常用的reduce函数:

var sum = a.reduce(function(x,y){return x+y},0);
需要两个参数,first one is 一个函数,任务就是用某种方法把两个值化简为一个值,并返回简化后的值,第二个参数是传递给函数的初始值。在例子中,第一次调用化简函数时的参数是0和2,相加后返回2,第二次调用时参数是2和12,返回14,每次都是将上一次计算返回值和数组下一个进行计算。最后reduce()返回这个值。
当不指定初始值调用reduce()时,它将数组的第一个元素作为其初始值。上面的求和例子就可以省略初始值的设定。
空数组调用reduce函数会报错!!!
reduceRight()的工作原理类似reduce(),不同之处在于:是按照数组的索引从高到低(从由到左)处理数组的。例如计算:2^(3^4);就是从右到左进行计算求值的。
var a = [2,3,4];
var result = a.reduceRight(function(x,y){
return Math.pow(y,x);
})

这里的union函数自己写的,运行下貌似没问题,可以合并对象属性:

 var objects = [{x:1},{y:2},{z:3}];
function union(x,y){
for(var i in y){
i in x ? null : x[i] = y[i];
}
return x;
}
var merged = objects.reduce(union);

最后一个方法:indexOf()和lastIndexOf(),里面传值都是要检索的字段,没有就返回-1,有就返回索引,一个从前往后查找,一个从后往前查找。没啥说的。本篇结束!!!

JavaScript的数组(一)的更多相关文章

  1. JavaScript Array数组方法详解

    Array类型是ECMAScript中最常用的引用类型.ECMAScript中的数据与其它大多数语言中的数组有着相当大的区别.虽然ECMAScript中的数据与其它语言中的数组一样都是数据的有序列表, ...

  2. JavaScript从数组中删除指定值元素的方法

    本文实例讲述了JavaScript从数组中删除指定值元素的方法.分享给大家供大家参考.具体分析如下: 下面的代码使用了两种方式删除数组的元素,第一种定义一个单独的函数,第二种为Array对象定义了一个 ...

  3. JavaScript中数组操作常用方法

    JavaScript中数组操作常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2 ...

  4. javascript常用数组算法总结

    1.数组去重 方法1: JavaScript //利用数组的indexOf方法 function unique (arr) { var result = []; for (var i = 0; i & ...

  5. javascript中数组的22种方法

    × 目录 [1]对象继承 [2]数组转换 [3]栈和队列[4]数组排序[5]数组拼接[6]创建数组[7]数组删改[8]数组位置[9]数组归并[10]数组迭代[11]总结 前面的话 数组总共有22种方法 ...

  6. javascript中数组Array的方法

    一.常用方法(push,pop,unshift,shift,join)push pop栈方法,后进先出var a =[1,2,3];console.log(a.push(40)); //4 返回数组的 ...

  7. 第二章:javascript: 数组

    数组是编程世界里最常见的数据结构.任何一种编程语言都包含数组,只是形式稍微有差异.数组是编程语言中的内建类型,通常效率都很高.可以满足不同需求的数据存储,本章将探索javascript中的数组工作原理 ...

  8. JavaScript操作数组

    数组被描述为一个存储元素的线性集合,元素可以通过索引来任意存取. 几乎所有的编程语言都有类似的数据结构,但是Javascript中的数组却略有不同. Javascript中的数组是一种特殊的对象,所以 ...

  9. Javascript中数组

    Javascript中数组 1.什么是数组 所谓的数组就是一组数据的集合,在内存中表现为一段连续的内存地址(保存在堆内存) 2.创建数组的含义 创建数组的目的:就是为了保存更多的数据 3.数组的定义 ...

  10. JavaScript删除数组重复元素的5个高效算法

    之前一段时间一直在准备面试, 因而博客太久没更新: 现在基本知识点都复习完毕, 接下来就分享下 面试的一些常见问题: 去正规的互联网公司笔试.面试有很大的概率会碰到 使用javascript实现数组去 ...

随机推荐

  1. King of the Waves

    You are organising a king of the hill tournament, the Buenos Aires Paddleboarding Competition (BAPC) ...

  2. SpringBoot项目后台对接微信支付开发——微信统一下单接口开发

    开始没找到微信支付的sdk.自己根据官方给的接口文档纯手写,各种xml转JSON,JSON转xml,加密解密,签名....整个人都是崩溃的 开发的第三天,发现有官方的sdk.心情一下子豁然开朗,整个人 ...

  3. sqlserver 查询各个学生语文、数学、英语、历史课程成绩

    -- 建表 插入数据 USE 你自己的数据库; CREATE TABLE Member( MID ) PRIMARY KEY, MName ) ); CREATE TABLE Course( FID ...

  4. 102)PHP,目录操作

    基本的操作: 创建目录: mkdir(目录地址,权限,是否递归创建=false); 注意第二个参数在windows系统下没有作用, 递归创建,就是多级目录,要是设计不存在目录,就自动创建 删除目录 R ...

  5. Python基本了解

    1. 计算机基础知识 CPU : 人类的大脑,运算处理问题 内存 : 临时储存数据,断点数据就会消失,存储数据快 硬盘 : 永久存储各种数据,相对于内存存储速度慢 操作系统 : 本质上是一个软件,用于 ...

  6. ofo小黄车推出车身商业化广告,能自救成功吗?

    ofo终于还是扛不住了!作为之前与摩拜相抗衡的巨头,ofo其实也是最被看好的共享单车企业之一.可惜共享单车行业的窘境,终究不是成为巨头后就能拯救的.摩拜被美团收购后,ofo就成为巨头垂涎的目标.数十亿 ...

  7. 接口测试 requests的身份认证方式

    requests提供多种身份认证方式,包括基本身份认证.netrc 认证.摘要式身份认证.OAuth 1 认证.OAuth 2 与 OpenID 连接认证.自定义认证.这些认证方式的应用场景是什么呢? ...

  8. HihoCode-1675-稀疏矩阵乘积

    上来先一顿暴力,结果70分就超时了. 然后意识到稀疏矩阵,有很多0,如果c[i][j] != 0,那么一定存在至少一个k满足a[i][k] != 0 && b[k][j] != 0; ...

  9. Python实现简单Web服务器

    实验楼教程链接: https://www.shiyanlou.com/courses/552/labs/1867/document http原理详解(http下午茶): https://www.kan ...

  10. IT培训的背后,是“韭菜”的躺赚梦!

    作者:九歌 本文转自公众号:Hack 本文只谈"骗局",不谈其他,绝不引战,如有错误,希望指出我会及时改正 导语 为什么要写这篇文章呢,近些年培训这个话题也比较火,很多在看这篇文章 ...