arr

JS数组

て烟熏妆下的殇ゞ 提交于 2019-11-29 17:11:37
垃圾回收(GC)  当一个对象没有任何变量或属性对他进行引用,此时无法操作该对象就成了垃圾,会占用大量的内存空间,必须进行清理  JS中拥有自动垃圾回收机制,会将这些垃圾对象从内存中销毁,我们不需要也不能进行垃圾回收的操作 将不再使用的对象设置为null。 var obj = new Object(); obj = null; 数组(Array)  数组也是一个对象  和普通功能相似,也是能储存一些值的  不同的是普通对象是使用字符串作为属性名的,而数组是使用数字作为索引操作元素  -索引:   从0开始的整数 向数组中添加元素  语法: 数组[索引] = 值 如果读取不存在的索引,不会报错而是返回undefined //创建数组 var arr = new Array(); //向数组中添加元素 //语法:数组[索引] = 值 arr[0] = 1; arr[1] = 2; arr[2] = 3; 获取数组的长度 对于连续数组,可以使用length属性来获取数组的长度  语法: 数组.length 修改length  如果修改的length大于原长度,则多出部分会空出来  如果修改的length小于原长度,则多出的元素会被删除 向数组最后一个位置添加元素 语法: 数组[数组.length] = 值; arr[arr.length] = 40;  使用字面量来创建数组 语法: [

浅谈JS的数组遍历方法

久未见 提交于 2019-11-29 17:11:28
用过Underscore的朋友都知道,它对数组(集合)的遍历有着非常完善的API可以调用的,_.each()就是其中一个。下面就是一个简单的例子: var arr = [1, 2, 3, 4, 5]; _.each(arr, function(el) { console.log(el); }); 上面的代码会依次输出1, 2, 3, 4, 5,是不是很有意思,遍历一个数组连for循环都不用自己写了。 _.each()方法遍历数组非常好用,但是它的内部实现一点都不难。下面就一起来看看到底是如何实现_.each()的。 在这之前,我们先来看看_.each()的API。_.each()的一般是如下调用的: _.each(arr, fn, context); 它接收3个参数, 第一个是需要遍历的数组( 其实是对象也是可以的,这个后面我们再一起来讨论 ); 第二个是它的回调函数(这个回调函数可以传入3个参数,如:function(el, i, arr),分别是当前元素、当前索引和原数组); 第三个是回调函数需要绑定到的上下文,即指定回调函数fn的this值。 好啦,需求已经非常明确了,开始干活啦! 我们先来实现一个最简单的_.each(),它不能够修改上下文this的,接收两个参数,代码如下: var _ = {}; // 假设这就是underscore哈 // 一个最简单的_

js中的数组遍历

大城市里の小女人 提交于 2019-11-29 17:11:07
js中的数组遍历是项目中经常用到的,在这里将几种方法做个对比。 ! for循环:使用评率最高,也是最基本的一种遍历方式。 let arr = ['a','b','c','d','e']; for (let i = 0, len = arr.length; i < len; i++) { console.log(i); // 0 1 2 3 4 console.log(arr[i]); //a b c d e } forEach()循环:forEach中传入要执行的回调函数,函数有三个参数。第一个参数为数组元素(必选),第二个参数为数组元素索引值(可选),第三个参数为数组本身(可选) let arr = ['a','b','c','d','e']; arr.forEach((item,index,arr)=> { console.log(item); // a b c d e console.log(index); // 0 1 2 3 4 console.log(arr); // ['a','b','c','d','e'] }) map循环: map()中传入要执行的回调函数,函数有三个参数。第一个参数为数组元素(必选),第二个参数为数组元素索引值(可选),第三个参数为数组本身(可选) var arr = [ {name:'a',age:'18'}, {name:'b',age:

js遍历数组的几种方法

不想你离开。 提交于 2019-11-29 17:09:19
第一种:for循环,也是最常见的 const arr = [11,22,33,44,55,66,77,88] for (let i = 0; i < arr.length; i++) { console.log(arr[i]) } 第二种:forEach() 1)、forEach()遍历普通数组 arr.forEach( function(item){ console.log(item) } ) 2)、forEach()遍历对象类型数组 const arr = [ {id:1,name:'zhangsan'}, {id:2,name:'lisi'}, {id:3,name:'wangwu'} ] arr.forEach( function(item){ console.log(item.id + '---' + item.name) }) 输出结果: 第三种: map()方法 map即是 “映射”的意思 ,原数组被“映射”成对应新数组 var newArr = arr.map( function(value,index){ console.log(value + '---' + index) return value + 10 }) console.log(newArr) 输出结果: 注意:forEach()和map()区别: 1、forEach:用来遍历数组中的每一项

JS 中的数组遍历方式效率比较

喜你入骨 提交于 2019-11-29 17:07:46
JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代码如下: for(j = 0; j < arr.length; j++) { } 简要说明: 最简单的一种,也是使用频率最高的一种,虽然性能不弱,但仍有优化空间 第二种:优化版for循环 代码如下: for(j = 0,len=arr.length; j < len; j++) { } 简要说明: 使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显。 这种方法基本上是所有循环遍历方法中性能最高的一种 第三种:弱化版for循环 代码如下: for(j = 0; arr[j]!=null; j++) { } 简要说明: 这种方法其实严格上也属于for循环,只不过是没有使用length判断,而使用变量本身判断 实际上,这种方法的性能要远远小于普通for循环 第四种:foreach循环 代码如下: arr.forEach(function(e){ }); 简要说明: 数组自带的foreach循环,使用频率较高,实际上性能比普通for循环弱 第五种:foreach变种 代码如下: Array.prototype.forEach.call(arr,function(el){ });

Java数组

痴心易碎 提交于 2019-11-29 16:48:39
数组的声明 数据类型[] 数组名 int[] arr;//推荐一维数组1 int arr[];//C风格一维数组2 int[][] arr=new int[5][5];//二维数组1 int[][] arr=new int [4][];//二维数组2 数组的初始化 int[] arr=new int[10];//动态初始化 int[] arr=new int[]{1,2,3};//静态初始化 int[] arr={1,2,3}//静态初始化 int[][] arr={{1,2},{3,4}}; 数组的赋值 int[][] arr=new int [4][];//元素为数组引用的数组 arr[0]=new int[3];//赋引用给数组元素 arr[1]=new int[]{1,2,3,4};//赋数组引用给数组元素 int[] arr=new int[3]; arr[0]=1; 数组的默认初始化值 new 产生的object存在于堆中,动态初始化有默认的初始化值 类型 初始化值 整数 0 小数 0.0 布尔类型 Flase 字符 '\u0000' 引用 NULL 来源: https://www.cnblogs.com/redo19990701/p/11523451.html

递归练习

老子叫甜甜 提交于 2019-11-29 16:36:14
//max值 function getMaxVal(arr){ let maxVal=null; function loop(arr){ let [key1,...keys]=arr; if(!key1){return} maxVal=key1>maxVal?key1:maxVal; loop(keys); } loop(arr) return maxVal; } getMaxVal([9,12,1,3,6]) function getMaxVal1(arr){ function loop(arr){ let [key1,...keys]=arr; if(!keys.length){return key1} return key1>loop(keys)?key1:loop(keys); } return loop(arr) } getMaxVal1([9,12,1,3,6]) let myReverse=(arr)=>{ let [key1,...keys]=arr; if(!keys.length)return [key1] return [...myReverse(keys),key1] } myReverse(['a','b','c']) 来源: https://www.cnblogs.com/little-ab/p/11522983.html

查找算法学习笔记

故事扮演 提交于 2019-11-29 16:34:53
折半查找 基本过程:在 有序 表中取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。 //arr为待查找的数组,key为要查找的关键字,low和high为需要查找的数组下标的范围 public static int find1(int[] arr, int key, int low, int high) { if (arr != null && arr.Length > 0) { if ((low >= 0 && low <= arr.Length - 1) && (high >= low && high <= arr.Length - 1)) { int mid; while (low <= high) { mid = (low + high) / 2; if (key < arr[mid]) { high = mid - 1; } else if (key > arr[mid]) { low = mid + 1; } else { return mid; } } } } return -1; } 插值查找 基本思想:如果一个有序的序列是均匀分布的

八大排序算法python实现

我只是一个虾纸丫 提交于 2019-11-29 15:20:48
一、概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为 O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短; unsortedList=[55, 91, 63, 71, 72, 7, 74, 16, 4, 31, 100, 51, 94, 35, 49, 46, 43, 59, 18, 17] 二、 算法 实现 1.插入排序——直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 要点:设立哨兵,作为临时存储和判断数组边界之用。 直接插入排序示例: 从后往前插入 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序, 所以插入排序是稳定的。 (无哨兵)直接插入排序——算法的实现: def

数据结构与算法之排序详解 一点课堂(多岸学院)

时光毁灭记忆、已成空白 提交于 2019-11-29 15:20:18
通过前面的知识,我们已经知道,有序的数据在查找时有极大的性能提升。很多查找都基于有序数据,但并不是所有的结构都能像二叉排序树一样,在插入数据时就已经排好序,很多时候往往是无序的数据,需要我们使用时再进行排序,这就意味着我们需要寻找高效率的排序算法。接下来,我们对当下使用较为普遍的几个算法逐一进行分析。这里推荐一个可以查看算法运行动态过程的网站,加深对算法原理的理解。 基础知识 排序定义 假设含有n个记录的序列为{r1. r2, ..., rn},其相应的关键字分别为{k1, k2, ..., kn},需确定1, 2, ..., n的一种排列p1, p2, ..., pn,使其相应的关键字满足kp1≤kp2≤...≤kpn(非递减或非递增) 关系,即使得序列成为一个按关键字有序的序列{rp1, rp2, ..., rpn} , 这样的操作就称为排序。 稳定性 假设ki=kj( 1≤i≤n, 1≤j≤ n, i≠j ) ,且在排序前的序列中 ri 领先于 rj (即i<j) 。如果排序后 ri 仍领先于 rj,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中 rj 领先 ri,则称所用的排序方法是不稳定的。 简单来说,就是对于原数据中相等的数据,排序前后如果相对位置没有改变,就是稳定的。 内排序与外排序 内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中