Array的javascript数据结构描述

写在前面的话:

常常看到技术博客上写的内容很详细,对于一个问题,你们的博客内容彷佛都是同样的。不难发现这些技术博客已经成为各路教程的汇总地,而教程通常都是参考国外博客翻译或者直接在经典的书籍上大片抄录。我不推荐在segementfault或者其余博客上找教程学习编程,由于这样得来的东西是碎片化的,每每也掺杂着做者我的对于程序的理解,很容易误导人,因此学习最好的方法是本身买上一本圣经认真看透,再来博客论坛看看别人的学习心得,而后对比本身的理解,这样收获才会很大。因此今天关于这个javascript数组的总结认识,我写的不是教程,而是根据经典书籍参考学习后获得的一些感悟。想要完整学习,请务必看下列参考书籍javascript

数据结构与算法JavaScript描述 p13~p32java

javascript高级程序设计(第三版) p84~p98算法

先来举个数组栗子

clipboard.png

tracy=[{1:"pomelo"},"tracy","2"];
//数组能够保存任何类型的数组,如字符串,对象,数值均可以
typeof(tracy)
//"object"数组是一个对象,对象是一个引用类型,
Array.isArray(tracy);
//”true“ ,这个是ECMAScript5定义的一个方法,
tracy[0][1]
//"pomelo",取出0号数组下属性名为“1”的值。用
tracy[0].1// VM1687:2 Uncaught SyntaxError: Unexpected numbermessage:
//由于对象属性值只能是字符串类型,因此直接用”点表示法“会报错,可是“[]表示法”能够
tracy=[{pomelo:"tracy"},"tracy","2"];
tracy[0].pomelo
//"tracy"。把数组0的对象属性名变成字符串就能够直接取值了
tracy.length//3
tracy[tracy.length]="imooc";
//"imooc", javascript中length是可读写的,由于数组可以实线末尾添加删除操做
tracy//[Object, "tracy", "2", "imooc"]
var tracyStr=tracy.toString();
//"undefined"  toString()方法,将数组转化为字符串
tracyStr
//"[object Object],tracy,2,imooc"
tracy.join(";");
//"[object Object];tracy;2;imooc"  
//join()方法只接受一个参数用于数组转化为字符串后的分隔符。
//toString()方法只是默认用“,”逗号分割。

以上就是一个简单的数组的栗子,咱们可能在平时中也高频使用。总结一下:
1.数组能够保存任何类型的数组,如字符串,对象,数值均可以
2.javascript中length是可读写的
3.JavaScript 对象中的属性名必须是字符串。编程

数组的标准定义是什么?

数组是:一个存储元素的线性集合(collection)---(一段线性分配的内存),元素能够经过索引来任意存取,索引一般是数字,用来计算元素之间存储位置的偏移量。几乎全部的编程语言都有类
似的数据结构。
然而JavaScript 的数组却略有不一样
1.javascript没有定义中说的那样的数据结构,做为替代。javascript提供类数组对象(array-like),把下标变成字符串,用其做为属性,因此这就是它慢的缘由
2.JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可
能是整数。使用起来方便:属性的检索操做像操做对象属性同样
3.数组能够由 Array 对象的构造函数建立,也能够用内置的方法数组

怎么建立数组?

对象的建立:数据结构

var pomelo={};//对象字面量表达法
或者 var pomelo=new Object();//Object构造函数的方法

数组的建立:数据结构和算法

var pomelo=[];//数组字面量表达法
或者 var pomelo=new Array();//使用array构造函数的方法(能够省略new)

Q:那么数组字面量表达法建立与构造函数建立有什么不一样呢?
A:大多数 JavaScript 专家推荐使用 []操做符,和使用 Array 的构造函数相比,这种方式被认为效率更高.编程语言

何时使用数组?

由于咱们知道数组是一种对象,那么咱们应该何时用数组?何时用对象呢?
其实有一个很简单的规则就是:当属性名是连续的整数时就使用数组,不然就使用对象.函数

数组有那些原生的方法呢?

concat() 链接两个或更多的数组,并返回结果。学习

join() 把数组的全部元素放入一个字符串。元素经过指定的分隔符进行分隔。

pop() 删除并返回数组的最后一个元素

push() 向数组的末尾添加一个或更多元素,并返回新的长度。

reverse() 颠倒数组中元素的顺序。

shift() 删除并返回数组的第一个元素
slice()从某个已有的数组返回选定的元素

sort() 对数组的元素进行排序

split() 方法用于把一个字符串分割成字符串数组。和join()方法相反
splice()删除元素,并向数组添加新元素。
toSource() 返回该对象的源代码。

toString() 把数组转换为字符串,并返回结果。

toLocaleString() 把数组转换为本地数组,并返回结果。

unshift() 向数组的开头添加一个或更多元素,并返回新的长度。

valueOf() 返回数组对象的原始值

这些原生方法的使用我就不一一介绍了,你们本身去查API

javascript怎么去描述这些方法的数据结构和算法呢?

1.为了方便链式调用,咱们能够给Array原型添加自定义的方法来扩充数组功能

Function.prototype.method=function(name,func){
        this.prototype[name]=func;
        return this;
    };

2.利用可读写的length能够完成数组添加,删除操做

好比  push() 向数组的末尾添加元素

var poemlo=["1","2","3"];
pomelo.push("4");//["1","2","3","4"]
// pomelo[pomelo.length]="4";//["1","2","3","4"]


好比 pop()函数

Array.method("pop_pomelo",function(){

    return this.splice(this.length-1,1);
})   
pomelo.pop();// “4”
//pomelo.pomelo_pop()  //["4"]

3.利用for in 能够完成数组的循环遍历的功能

//好比forEach()方法使得每一个数组元素有乘方的效果
   var pomelo=["1","2","3"];
    function square(num){
        console.log(num+":   "+num*num);
    }
    pomelo.forEach(square);
    //能够添加数组功能square
         Array.method("square",function(){
        for (var i=0;i<this.length;i++){
            console.log(i+" "+this[i]*this[i]);
        }    
    })
    pomelo.square();//获得的效果与forEach()是同样的

4.普通的数组直接赋值是浅赋值,会改变原有的数组对象,咱们能够本身写一个copy数组函数

Array.method("copy_pomelo",function(){
    var arr= [];
    for (var i=0;i<this.length;i++){
        arr[i]=this[i];
    }
    /*console.log(arr);
    console.log(this);*/
    arr.length=this.length;
    return arr;
    })
    var new_pomelo=pomelo.copy_pomelo();
    //new_pomelo的数组值和pomelo同样,可是是独立的数组
  1. 区分splice()slice()函数,split()函数

    slice() 从某个已有的数组返回选定的元素 
    slice(start,end)
    ===取出来的数组是slice[start]--slice[end] (可是不包含slice[end])
    splice() 删除元素,并向数组添加新元素。
    splice(start,deletecount,item)
    ===数组从splice[start]开始,移除deletecount个元素,并用新的item数组元素代替
    split()函数是把一个`字符串`分割成字符串`数组`。和join()方法刚好相反。
    "2:3:4:5".split(":")    //将返回["2", "3", "4", "5"]

先写到这儿.持续更新==.

相关文章
相关标签/搜索