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) ...
随机推荐
- [poj 3261]Milk Patterns
后缀数组搞一下就可以了喵~ 其实这道题的第一个想法是 SAM ,建完后缀自动机后拓扑排序跑一遍统计下每个子串的出现次数就 O(N) 就妥妥过掉了 后缀树也是 O(N) 的,统计一下每个节点对应的子树中 ...
- java多线程:java队列详解
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 在队列这 ...
- springMVC源码学习之:springMVC响应请求的几种方法
spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. ModelAndView @RequestMap ...
- as3 中 textfiled的htmltext 的常用属性
http://blog.sina.com.cn/s/blog_6d193c030100x6ud.html <a> 超链接标签 属性:href: 链接地址 target: 目标窗口 可取值为 ...
- Linux-某电商网站流量劫持案例分析与思考
[前言] 自腾讯与京东建立了战略合作关系之后,笔者网上购物就首选京东了.某天在家里访问京东首页的时候突然吃惊地发现浏览器突然跳到了第三方网站再回到京东,心里第一个反应就是中木马了. 竟然有这样的事,一 ...
- EJB 的理解
引用源:http://blog.csdn.NET/cymm_liu/article/details/7760989 1.EJB 概念的剖析 我们先看一下,EJB 的官方解释: 商务软件的核心部分是它的 ...
- 二十四种设计模式:装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern) 介绍动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活.示例有一个Message实体类,某个对象对它的操作有Insert()和 ...
- Sql Server 事务隔离级别的查看及更改
根据自身 Sql Server 的情况来自定义 事务隔离级别,将会更加的满足需求,或提升性能.例如,对于逻辑简单的 Sql Server,完全可以使用 read uncommitted 模式,来减少死 ...
- PHP 开发环境配置
使用phpStudy +Zend Studio 使用phpStudy +Zend Studio ,这个组合是我个人使用的比较好的,现在分享出来.一.phpStudy简体中文版 该程序包集成最新的Apa ...
- eclipse中tomcat发布失败(Could not delete May be locked by another process)原因及解决办法
在eclipse中tomcat发布项目时,偶尔出现了以下情况: publishing to tomcat v7.0 services at localhost has encountered a pr ...