《Javascript权威指南》数组

一、创建数组

var a = [,,]; //数组有2个元素

var a = new Array(10);    //指定长度

二、稀疏数组

从0开始的不连续索引的数组。可以使用Array()构造函数或简单指定数组的索引大于数组长度来创建。

var a1 = [,,,];         //数组是[undefined, undefined, undefined]

var a2 = new Array(3);   //没有元素

delete 删除数组元素不会修改length,数组变成稀疏数组

三、数组遍历

function Traversal(o){

var keys = Object.keys(o);

var values = [];

for (var i = 0;

i < keys.length; i++){

var key = keys[i];

values[i] = o[key];

}

return values;

}

跳过 null undefined 不存在的元素

if(!a[i]) continue;

跳过 undefined 不存在的元素

if(a[i] === undefined) continue;

只跳过不存在的元素

if(! i in a) continue;

使用 for in 处理稀疏矩阵

每次遍历将一个可枚举属性名赋值给循环变量

var a = [1,,2,3];

var b = [];

var pos = 0;

for(var index in a) {

b[pos++] = a[index];

}

四、多维数组

var table = new Array(10);

for(var i = 0;

i < table.length; i++) {

table[i] = new Array(10);

}

//初始化

for(i = 0; i < table.length; i++) {

for(j=0; j < table[i].length; j++) {

table[i][j] = i * j;

}

}

五、数组方法

join()

将数组所有元素转化为字符串连在一起,返回生成的字符串,可以指定一个字符串分隔各个元素,不指定默认使用逗号

reverse()

将数组的元素颠倒顺序,返回逆序数组。 在原先的数组中重新排列它们

sort()

将数组的元素排序并返回排序后的数组,不带数组调用时以字母表顺序排序,如果包含undefined,会被排到数组末尾。

给sort()传递一个比较参数。假设第一个参数应该在前,比较函数返回一个小于0的值。

a.sort(function (a,b) { return a-b});   //数值大小

a.sort(function (a,b) {

var c = a.toLowerCase();

var d = b.toUpperCase();

if (c < d) return -1;

if (c > d) return 1;

});

concat()

创建并返回一个新数组,它的元素包括调用concat() 的原数组和提供的参数。如果有数组,则连接的是数组的元素。

slice()

返回指定数组的片段或子数组,两个参数分别指定开始和结束的位置(不包含)。负数表示相对于最后元素的对应位置,不会修改数组。

splice()

能从数组删除元素、插入元素,完成操作后数组元素改变索引值。第一个参数指定起始位置,第二个参数指定从元素中删除的元素的数量,如果省略第二个参数,则从起始位置后全部删除。第三个参数开始指定在第一个参数指定的位置要插入的元素。

push() pop()

将数组当做栈使用,返回数组新长度

unshift() shift()

unshift()在数组头部添加或删除元素,将剩余元素前移,返回数组新长度。使用多参数调用 unshift()是一次性插入 shift()删除数组第一个元素并返回,把剩余元素下移

toString() toLocaleString()

toString()将每个元素转换为字符串,用逗号分隔

六、ECMAScript5的数组方法

forEach() 遍历

为每个参数调用指定的函数。要提前终止需要把forEach()放在try并能抛出异常。

map()     映射

将每个元素传递给指定函数,返回一个数组,包含该函数的返回值。传递给map()的函数应该有返回值。 返回的是新数组,不修改原数组

var a = [1,2,3];

b = a.map(function (x){return x*x;});

filter()  过滤

返回元素的子集,如果返回值为true或能转化为true,则添加到返回的数组。会跳过稀疏数组缺少的元素。

var a = [1,2,3,4,5];

a.filter(function (x){return x%2==0});

every() some()

检测 every() 当且仅当数组所有元素调用函数都返回true,才返回true some()  只要至少有一个元素调用函数返回true,就返回true 一旦every()或some()确定该返回什么值时就停止遍历

reduce() reduceRight()  简化

使用指定的函数将数组元素组合,生成单个值。 第一个参数把两个值组合或化简为一个值,返回化简后的值。第二个参数(可选)传递给函数的初始值。 reduceRight()按照数组索引从右到左

indexOf() lastIndexOf()

搜索 搜索给定值的元素,返回找到的第一个元素的索引,没有则返回-1,lastIndexOf()从最后开始。第二个参数(可选)表示从该位置开始,可以是负数。 //返回数组所有元素匹配值的索引

function findall(a, x) {

var results = [],

len = a.length,

pos = 0;

while(pos < len) {

pos = a.indexOf(x,pos);

if(pos === -1) break;

results.push(pos);

pos = pos + 1;

}

return results;

}

七、检测数组

var isArray = Function.isArray || function (o) {

return typeof o === "object" &&

Object.prototype.toString.call(o) === "[object Array]";

}

时间: 2024-10-21 06:30:15

《Javascript权威指南》数组的相关文章

Java数据结构与算法-数组

1 public class TestMyArray{ 2 3 public static void main(String[] args) { 4 5 MyArray array = new MyArray(6); 6 array.insert(10); 7 array.insert(12); 8 array.insert(8); 9 array.insert(17); 10 array.insert(6); 11 array.insert(15); 12 array.display(); 1

Java数据结构和算法(二)——数组

数组的用处是什么呢?--当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用.数组可以进行插入,删除,查找等. 1)创建和内存分配 Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符. int array[] = new int[10]; 既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) -- 一切都是

Java数据结构和算法之数组与简单排序

一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数组 一维数组(one‐dimensional array )实质上是相同类型变量列表.要创建一个数组,你必须首先定义数组变量所需的类型.通用的一维数组的声明格式是: type var‐name[ ]; 获得一个数组需要2步: 第一步,你必须定义变量所需的类型. 第二步,你必

Java数据结构与算法之数组

数组特点: 1.大小固定 2.同一数据类型 3.下标访问 4.数据项可重复 Java数据类型:基本类型(int和double)和对象类型.在许多编程语言中,数组也是基本类型.但在Java中把它们当作对象来对待,因此在创建数组时必须使用new操作符. 有序数组与无序数组比较:最主要的好处是查找速度比无序数组快多了.不好的方面是在插入操作中由于所有靠后的数据都需要移动以疼开空间,所以速度较慢.有序数组和无序数组数据中的删除操作都很慢,这是因为数据项必须向前移动来填补已删除数据项的空洞. 数据访问:从

《Java数据结构和算法》- 数组

Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new操作符: int [] objArray = null; // defines a reference to an array objArray = new int[100]; // creates the array, and sets objArray to refer to it 或使用等价的

Java数据结构和算法之递归

四.递归 递归是函数调用自身的一种特殊的编程技术,其应用主要在以下几个方面:   阶乘 在java当中的基本形式是: Public  void  mothed(int n){//当满足某条件时: Mothed(n‐1): } 递归二分查找 Java二分查找实现,欢迎大家提出交流意见.  /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integ

Java数据结构与算法之集合

线性表.链表.哈希表是常用的数据结构,在进行Java开发时,SDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中. 一.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object.一些Collection允许相同元素而另一些不行.一些能排序而另一些不行.Java  SDK不提供直接继承自Collection的类,Java  SDK提供的类都是继承自Collection的"子接口"如List和Set

Java数据结构和算法之链表

三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中都包含一个对下一个点引用的字段(通常叫做next)但是本身的对象中有一个字段指向对第一个链结点的引用. 单链表 用一组地址任意的存储单元存放线性表中的数据元素. 以元素(数据元素的映象)  + 指针(指示后继元素存储位置)  = 结点(表示数据元素 或 数据元素的映象) 以"结点的序列&q

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

Java数据结构和算法(一)——开篇

这篇文章里面不讲技术,抽空讲讲技术和通俗之间有一种奇特的关系,还有驱动力学习的东西. 1)技术与通俗 大学里面那本严蔚敏的数据结构不厚,内容丰富,但是复杂问题的讲解方面篇幅这样就少了,比较难理解,c也不是很擅长,但是基本的思路还是有的. 简单的链表,数组,堆栈,队列,图,几个排序算法. 后面看到知乎涛吴的回答,当时很震撼,这里引用一下他的回答: 如果说 Java 是自动档轿车,C 就是手动档吉普.数据结构呢?是变速箱的工作原理.你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而