资讯专栏INFORMATION COLUMN

Array的javascript数据结构描述

iOS122 / 966人阅读

摘要:几乎所有的编程语言都有类似的数据结构。然而的数组却略有不同。没有定义中说的那样的数据结构,作为替代。元素通过指定的分隔符进行分隔。返回该对象的源代码。把数组转换为本地数组,并返回结果。

写在前面的话:

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

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

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

先来举个数组栗子

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

4.普通的数组直接赋值是浅赋值,会改变原有的数组对象,我们可以自己写一个copy数组函数

    Array.method("copy_pomelo",function(){
    var arr= [];
    for (var i=0;i

区分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"]

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85867.html

相关文章

  • 常用排序算法之JavaScript实现

    摘要:代码实现六堆排序算法简介堆排序是指利用堆这种数据结构所设计的一种排序算法。九计数排序算法简介计数排序是一种稳定的排序算法。计数排序不是比较排序,排序的速度快于任何比较排序算法。 赞助我以写出更好的文章,give me a cup of coffee? 2017最新最全前端面试题 1、插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它...

    jerry 评论0 收藏0
  • JavaScript基础整理之数组(一)

    摘要:原文发布在数组应该是日常开发中最常见的数据结构了,虽然常见,但是却不一定能优雅地处理好,中数组的处理方法很多,各个方法的参数返回值是否修改原数组等也容易记混。 原文发布在:http://blog.xiaofeixu.cn/2017... 数组应该是日常开发中最常见的数据结构了,虽然常见,但是却不一定能优雅地处理好,JavaScript中数组的处理方法很多,各个方法的参数、返回值、是否修...

    dingda 评论0 收藏0
  • V8 中 Fast 属性

    摘要:这些是中可用的最快属性。通常来说我们将线性属性存储中存储的属性称为。因此也支持所谓的属性。整数索引属性的处理和命名属性的复杂性相同。 本文为译文,原文地址:http://v8project.blogspot.com...,作者,@Camillo Bruni ,V8 JavaScript Engine Team Blog 在这篇博客中,我们想解释 V8 如何在内部处理 JavaScrip...

    Andrman 评论0 收藏0
  • JavaScript Array 整理 - 元素操作

    摘要:此文章是我的原创文章,原文地址前篇整理了一些常用的遍历操作方法,今天再整理一下对象中针对元素操作的方法。返回当前数组最后一个元素描述返回数组第一个元素,并从当前数组中删除它。删除的元素组成的数组 此文章是我的原创文章,原文地址:http://lpgray.me/article/49/ 前篇整理了一些Array常用的遍历操作方法,今天再整理一下Array对象中针对元素操作的方法。 分别是...

    phodal 评论0 收藏0
  • JavaScript数组去重—ES6两种方式

    摘要:数组的方法方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。可选,执行函数时的值。删除所有的键值对,没有返回值。返回一个布尔值,表示某个键是否在当前对象之中。 说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代码...

    FrancisSoung 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<