Array的javascript数据结构描述
写在前面的话:
经常看到技术博客上写的内容很详细,对于一个问题,大家的博客内容似乎都是一样的。不难发现这些技术博客已经成为各路教程的汇总地,而教程一般都是参考国外博客翻译或者直接在经典的书籍上大片抄录。我不推荐在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);//可以添加数组功能squareArray.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一样,但是是独立的数组
区分
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"]
先写到这儿.持续更新==.
Array的javascript数据结构描述相关推荐
- 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组
第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...
- JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)
注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...
- JavaScript数据结构和算法简述——前言
为什么要使用数据结构和算法(程序=数据结构+算法) 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.包括数组.链表.栈.二叉树.哈希表等. 算法是对这些结构中 ...
- 从 JavaScript 属性描述器剖析 Vue.js 响应式视图
学习每一门语言,一般都是从其数据结构开始,JavaScript也是一样,而JavaScript的数据结构中对象(Object)是最基础也是使用最频繁的概念和语法,坊间有言,JavaScript中,一切 ...
- 从JavaScript属性描述器剖析Vue.js响应式视图
学习每一门语言,一般都是从其数据结构开始,JavaScript也是一样,而JavaScript的数据结构中对象(Object)是最基础也是使用最频繁的概念和语法,坊间有言,JavaScript中,一切 ...
- 学习JavaScript数据结构与算法(一):栈与队列
本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...
- 学习javascript数据结构(三)——集合
前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...
- JavaScript数据结构和算法简述——数组
为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...
最新文章
- 12月北京CISA认证考试考前辅导会成功举办
- jquery zoom jquery放大镜特效
- 数据采集与分析的那些事——从数据埋点到AB测试
- 开学一月,可以自己玩自己做的游戏了!!!
- Enze frist day
- 10个实用的 ES6 方法
- AndroidStudio安卓原生开发_activity之间复杂对象类型的数据传递---Android原生开发工作笔记92
- 关于SQL中的两个问题的理解
- 【排序】动画演示10大排序算法
- CSDN资源免费下载攻略,手慢无!
- VS2015安装提示“安装包丢失或损坏”
- IDEA启动Tomcat中文乱码(已解决)
- ITSM正向浪涌测试仪
- 德州农业机械大学计算机科学,2020年德州农业机械大学申请条件
- 5元的小乌龟吃什么_小乌龟吃什么?小乌龟怎么养经验详解
- 谷歌浏览器显示oracle,css让table不显示边框的代码在火狐和谷歌浏览器中无效
- 超详细的逐句介绍Java网络编程之Socket类函数源码讲解(全)
- 这样用横线本做日计划真的太太太喜欢了
- 百灵达um2和umc22_百灵达UMC22和百灵达UMC404声卡简评?
- 生成王者荣耀装备信息Markdown和Excel
热门文章
- 使用boost.python进行混合开发
- STL:使用string、vector、complex和limits
- 修改wireshark协议解析规则
- SpringBoot系列: 使用 flyway 管理数据库版本
- JS 借助 pako.js 实现网络请求获取 gzip 数据流并解析, 解决汉字乱码
- Laravel- 数据库迁移
- 使用 Hexo + Next 搭建静态博客
- 关于textarea的ie9的maxlength不起作用的问题,请参考如下URL解决。
- kafka的消费隔离级别(持续更新中)
- ElastieSearch安装以及与Mongodb的概念对照关系