JavaScript笔记之数组 keyword(存储和释放&堆栈 & 按值 引用)
1.数组创建及初始化
var obj=new Array();
var arr=[];
可以延伸为长度一定的,字面量定义数组
2.堆栈 按值传递 引用类型
数组是引用类型,不是值传递,
栈:系桶自动分配和释放 ,比如函数的参数、局部变量 先进后出 一级缓存
堆:一般由程序员分配释放,程序结束后系统回收 先进先出 二级缓存
3.关联数组和索引数组
关联数组即hash数组,本质上js底层,一切对象都是关联数组
所以以下写法能产生运行结果,
能运行结果:2
var keys=[1,2,3,4];
console.log(keys["1"]);
4.删除数组里面重复元素:(常规解法&hash数组解法对比)
1.常规方法思路:创建一个数组,然后用原有数组里面的元素和新数组里面的所有元素依次对比,若不同,就将此元素增加为新数组最后一个元素
function f(arr) //实现删除数组内重复的元素
{
var arrc=[];
//拿出arr第一个元素,放入arrc数组第一个
arrc[0]=arr[0];
//遍历arr数组,从1开始,取出元素,与arrc(copy数组)中元素比较
for(var i=1;i<arr.length;i++)
{
for(var j=0;j<arrc.length;j++)
{
if(arrc[j]==arr[i])
break;//相等则结束此次的寻找,跳出循环
}
j==arrc.length&&(arrc[arrc.length]=arr[i]);//不相等则赋值给数组最后一个元素
}
return arrc;
}
console.log(f([1,2,2,1,4,5]));
运行结果:[1,2,4,5]
2.利用hash数组解决,利用hash的特点,大大提高效率 ,注意返回是字符类型,可以根据需要转换。
function f1(arr){
//新建一个hash数组
var hash=[];
hash[arr[0]]=1;//初始化hash数组第一个元素
for(i=1;i<arr.length;i++)
{
if(hash[arr[i]]==undefined)
hash[arr[i]]=1; //如果hash数组中arr[i]对应的元素未定义,说明未重复,则将其放入hash数组中
}
//结束遍历之后,取出hash数组
var back=[];
for(back[back.length] in hash);
return back;
}
console.log(f1([1,2,2,1,4,5]));
运行结果:["1","2","4","5"]
关于执行的效率上,特别当数据增多时,hash数组由于不需要去遍历数组查找,所以在执行效率上,将远远高于常规方法。
JavaScript笔记之数组 keyword(存储和释放&堆栈 & 按值 引用)的更多相关文章
- [Effective JavaScript 笔记]第54条:将undefined看做“没有值”
undefined值很特殊,每当js无法提供具体的值时,就会产生undefined. undefined值场景 未赋值的变量的初始值即为undefined. var x; x;//undefined ...
- Javascript进阶篇——(数组)笔记整理
什么是数组数组是一个值的集合,每个值都有一个索引号,从0开始,每个索引都有一个相应的值,根据需要添加更多数值. <script type="text/javascript"& ...
- javascript笔记整理(数组)
数组是一个可以存储一组或是一系列相关数据的容器. 一.为什么要使用数组. a.为了解决大量相关数据的存储和使用的问题. b.模拟真是的世界. 二.如何创建数组 A.通过对象的方式来创建——var a= ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- JavaScript学习笔记之数组(一)
数组基础篇 一.数组概述 1. 数组的语法 数组(array)是按次序排列的一组值.每个值的位置都有编号(从0开始). var arr=[1,2,3] //arr[0]=1 任何类型的数据,都可以放入 ...
- JavaScript笔记02——基本语法(包括函数、对象、数组等)
Doing Math & Logic Conditional & Looping Functions Objects Arrays Doing Math & Logic 1.J ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- javascript中关于数组的一些鄙视题
一.判断一个数组中是否有相同的元素 /* * 判断数组中是否有相同的元素的代码 */ // 方案一 function isRepeat1(arrs) { if(arrs.length > 0) ...
随机推荐
- [CTSC 2012][BZOJ 2806]Cheat
真是一道好题喵~ 果然自动机什么的就是要和 dp 搞基才是王道有木有! A:连 CTSC 都叫我们搞基,果然身为一个程序猿,加入 FFF 团是我此生最明智的选择.妹子什么闪边去,大家一起来搞基吧! Q ...
- Linux 挂载新硬盘
Linux 的硬盘识别 在 /dev/ 下建立相应的设备文件.如 sda 表示第一块 SCSI 硬盘 hda 表示第一块 IDE 硬盘(即连接在第一个 IDE 接口的 Master 口上) scd0 ...
- javase tutorial
http://docs.oracle.com/javase/tutorial/index.html
- microsoft Ebook
http://social.technet.microsoft.com/wiki/contents/articles/11608.e-book-gallery-for-microsoft-techno ...
- WCF入门教程四[WCF的配置文件]
一.概述 配置也是WCF编程中的主要组成部分.在 以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址. 服务 ...
- Ueditor 标签被过滤
1:将allowDivTransToP设置为false 2:将root.traversal方法中的switch注释
- win7 关于远程桌面登陆的方法,相应服务的启动
转自:http://blog.csdn.net/ningfuxuan/article/details/7519476 远程登陆电脑,对远程电脑的设置 (1)首先要启动远程电脑中的Remote Desk ...
- DataRow[] 转为数组
DataRow[] rows = dt.Select("1=1"); ].ToString()).ToArray();
- [Hibernate] - Criteria Select
使用Hibernate的Criteria做查询. 参考文档: http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/querycri ...
- vue通过判断写样式(v-bind)
v-bind:style="$index % 2 > 0?'background-color:#FFF;':'background-color:#D4EAFA;'"