arr

js中array(数组)对象的splice方法的详解

不打扰是莪最后的温柔 提交于 2020-04-08 04:26:41
splice()可向数组删除并加入新的元素。 语法 arrayObject.splice(index,howmany,element1,.....,elementX) <script type="text/javascript"> var arr = new Array(5) arr[0] = "Jani" arr[1] = "Hege" arr[2] = "Stale" arr[3] = "Kai Jim" arr[4] = "Borge" document.write(arr + "<br />") arr.splice(2,0,"Lene") document.write(arr + "<br />") </script> 输出结果为: Jani,Hege,Stale,Kai Jim,Borge Jani,Hege,Lene,Stale,Kai Jim,Borge arr.splice(2,1,"Tove") 输出结果为: Jani,Hege,Stale,Kai Jim,Borge Jani,Hege,Tove,Kai Jim,Borge arr.splice(2,3,"Tove") 输出结果为: Jani,Hege,Stale,Kai Jim,Borge Jani,Hege,Tove 来源: https://www.cnblogs.com/xcj1989/archive

字符串和数组的相互转换

ε祈祈猫儿з 提交于 2020-04-07 20:54:48
1、字符转数组 String str = "0,1,2,3,4,5,67"; String [] arr = str.split(","); //split分割符 System.out.println(Arrays.toString(arr)); //[0,1,2,3,4,5,6,7] 2、数组转字符 String[] arr = { "0", "1", "2", "3", "4", "5" }; (1)循环 StringBuffer str5 = new StringBuffer(); for (String s : arr) { str5.append(s); } System.out.println(str5.toString()); // 012345(2)使用StringUtils的join方法//StringUtils.join():将数组或集合以某拼接符拼接到一起形成新的字符串 String str1 = StringUtils.join(arr); System.out.println(str1); // 012345 String str2 = StringUtils.join(arr, ","); // 数组转字符串(逗号分隔) System.out.println(str2); // 0,1,2,3,4,5(3) 使用ArrayUtils的toString方法

小程序图片转base64

丶灬走出姿态 提交于 2020-04-07 15:19:50
1:动态tabBar,item项,相册或者手机拍照 clickPhoto() { var that = this; wx.showActionSheet({ itemList: ['从相册中选择', '拍照'], itemColor: "#2874dc", success: function (res) { if (!res.cancel) { if (res.tapIndex == 0) { that.chooseWxImageShop('album'); // 从相册中选择 } else if (res.tapIndex == 1) { that.chooseWxImageShop('camera'); // 手机拍照 } } } }) }, 2:用户选择图片 chooseWxImageShop: function (type) { var that = this; wx.chooseImage({ count: 4, // 允许用户选择几张图片 sizeType: ['original', 'compressed'], sourceType: [type], success: function (res) { var arr = that.data.photoArr.concat(res.tempFilePaths); that.setData({ photoArr: arr

generator函数yield

冷暖自知 提交于 2020-04-07 11:08:07
Generator 函数 yield* 表达式 如果在 generator 函数内部调用另一个 generator 函数,默认情况下是没有效果的。 yield* 后面的 Generator 函数(没有 return 语句时)等同于在 generator 函数内部部署 for...of 循环 // 定义generator函数 function* ickt(){ yield 1; yield 2; } function* demo(){ yield "ljh"; yield "ljh1"; // 直接执行 ickt // ickt();// 无效 // yield ickt();// ['ljh','ljh','ickt'] //返回状态机中的状态 // let i= ickt(); // for(let item of i){ // console.log(item) // yield item; // } // yield*表达式 yield* ickt(); yield "12"; } let d = demo(); console.log([...d]) yield* 后面跟着 个数组,由于数组原生支持遍历器,因此就会遍历数组成员 任何数据结构只要有 Iterator 接口,就可以被 yield* 遍历 // 定义generator函数 function* ickt(){

堆排序原理及其js实现

送分小仙女□ 提交于 2020-04-06 07:56:12
图文来源:https://www.cnblogs.com/chengxiao/p/6129630.html 堆排序是利用 堆 这种数据结构而设计的一种排序算法,堆排序是一种 选择排序, 它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆排序是利用 堆 这种数据结构而设计的一种排序算法,堆排序是一种 选择排序, 它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆     堆是具有以下性质的 完全二叉树 :每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] 接下来,我们来看看堆排序的基本思想及基本步骤: 堆排序基本思想及步骤 堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n

for...of循环

亡梦爱人 提交于 2020-04-06 06:45:53
for of 循环语句 for...of 循环语句 ES6 为实现了迭代器接口的数据提供了统一访问访机制:新增了一个循环语句 — for...of 循环语句;该语句会自动寻找 Iterator 接口。所以数据只要实现了 Iterator 接口,该数据就是可以被遍历的;该接口默认部署在 Symbol.iterator 属性上 原生的数据实现了迭代器接口的有: Array , String , Map , Set , TypedArray (如 Int8Array ), arguments , NodeList , HTMLCollection 等 // 字符串迭代器接口 console.log(String.prototype[Symbol.iterator]) //类数组 迭代器 let arr = new Int8Array(4) arr[0] = 10 arr[1] = 100 // arr[2] = 1000 arr[2] = 2 ** 7 - 1 console.log(arr) //参数 function demo() { console.log(arguments) } demo() console.log(document.getElementsByTagName('div')); console.log(document.querySelectorAll('div'

9.5 异常处理规则

自作多情 提交于 2020-04-05 17:12:15
目录 一、不要过度使用异常 二、不要使用过于庞大的try块 三、避免使用Catch All语句 四、不要忽略捕获到的异常 成功的异常处理应该实现如下4个目标 1、使程序代码混乱最小化 2、捕获并保留诊断信息 3、通知合适的人员 4、采用合适的方式结束异常活动 一、不要过度使用异常 过度使用异常主要有两个方面: 1、把异常和普通错误混淆在一起,不在编写任何错误处理代码,而是以简单地抛出异常来代替所有的错误处理。 2、使用异常处理代替流程控制。 对于完全已知的错误,应该编写处理这种错误的代码,增加程序的健壮性;对于普通错误,应该编写处理这种错误的代码,增加程序的健壮性。只有对于外部的、不能确定和预知的运行错误才使用异常。 比如五子棋游戏,处理用户输入坐标点已有棋子的两种方式: //如果用户试图下棋的坐标点已有棋子 if(!gb.board[xpos-1][ypos-1].quales("+")) { System.out.println("你输入的坐标点已有棋子了,请重新输入:"); continue; } 上面的处理方式检查用户试图下棋点已有棋子,立即打印一条提示语句,并重新开始下一次循环。这种处理方式简单明了,逻辑清晰。 如果将上面的机制改成如下方式: //如果用户试图下棋的坐标点已有棋子,程序自行抛出异常 if(!gb.board[xpos-1][ypos-1].quales("

hdu 4747【线段树-成段更新】.cpp

爱⌒轻易说出口 提交于 2020-04-04 09:55:55
题意:   给出一个有n个数的数列,并定义mex(l, r)表示数列中第l个元素到第r个元素中第一个没有出现的最小非负整数。   求出这个数列中所有mex的值。    思路:   可以看出对于一个数列,mex(r, r~l)是一个递增序列   mex(0, 0~n-1)是很好求的,只需要遍历找出第一个没有出现的最小非负整数就好了。这里有一个小技巧: 1 tmp = 0; 2 for (int i = 1; i <= n; ++i) { 3 mp[arr[i]] = 1; 4 while (mp.find(tmp) != mp.end()) tmp++; 5 mex[i] = tmp; 6 } View Code   这样可以利用map中的红黑树很快找到第一个没有出现的最小非负整数。   然后在求mex(1~n-1, 0~n-1)的过程中,我们可以看出,每消除当前值arr[i],会影响到的是在下一个arr[i]出现前 往后的mex值中比arr[i]大的值,即如果当前这个值不存在了,那么在这个值下一次出现前,mex值比当前值大的mex值都应被替换成arr[i]。   所以我们可以再一次利用map的红黑树找到当前值下一次出现的位置,然后利用线段树成段更新往后的mex值和求出会影响到的mex值的个数。 1 for (int i = n; i >= 1; --i) { 2 if (mp

常见排序方法

不问归期 提交于 2020-04-03 14:55:14
比较常用的排序方法(升序): 冒泡排序: 最常用的排序方法。大体思路就是每次选出一个最大值,第二次选出次大值,基本上就是两个for循环。 鸡尾酒排序 :冒泡排序方法的变种,鸡尾酒排序,待排序数组首先从0->n-1找出最大值,然后n-2->0找出最小值,然后再从1->n-2找次大值……依次类推……一个while循环,里面套两个for循环即可。 奇偶排序 :也是冒泡排序的变种。一个while循环,里面两个for循环,但是一个for循环从0开始,一个从1开始,每次加2,比较相邻两个数值大小。 快速排序 :是分之思想的一种体现。对于一个待排序队列,首先选择一个 基准 ,扫描数据,大于这个基准数据的元素放在右侧,小于的放在左侧,然后左侧和右侧的数据又是待排序队列,再分别选择基准……递归下去,知道全部都是有序的。 插入排序: 是一种比较直观的排序方法,从待排序队列中构建有序队列,把剩余的待排序数据插入到有序队列中。 希尔排序 :分步长排序法,对相隔步长的数据分别进行排序,然后减小步长,直至步长为1,主要可以减少数据的移动次数。 选择排序: 选择一个最大元素放入队尾,然后从剩余的元素中选择最大的放入队尾的前一位置,直到待排序数组中只有一个元素为止。 堆排序算法 :选择排序的一种,不停的构建大(小)顶堆,然后取出顶,得到有序序列。 归并排序 :也是典型的分治法思想的应用