JavaScript 遍历数组的多种方式 作者: Chuwen 时间: 2019-07-04 分类: JavaScript 评论 # JS遍历数组的多种方式 ## 1. 普通 `for循环` > 应用最为普遍的循环写法,性能好,可读性好。 ``` for (let i = 0; i < arr.length; i++){ //code } ``` ## 2. 优化版 `for循环` > 优点:性能比普通for循环好,省去了每次对于数组长度的判断。 > 缺点:对于长度可能会产生变动的数组,这种方法不适用,可能会导致有的值没被遍历到等错误。 ``` for( let i = arr.length;i > 0; i--){ //code } ``` ## 3. for in循环 > 优点:提供的三个参数可以很大程度上减少代码长度,可读性好。 > 缺点:无法遍历对象, 在IE9以上才能使用,而且无法使用 break,continue 跳出循环,使用 return 是跳 过本次循环。 ``` for(let index in arr) { //如果arr是数组,index 为索引 //如果arr是对象,index 为属性 }; ``` > for in循环本来是用来遍历对象的属性的,因为数组是特殊的对象,因此也可以用来遍历,需要注意的是, index在数组和对象中表示的含义是不同的,在对象中,index代表属性,在数组中,index代表索引。 > > 另外在遍历对象时,for in会将原型链上的属性也遍历一遍,如果你不需要原型链上的属性,你可以在循环体执行之前进行一次判断,如下: ``` if(!arr.hasOwnProperty(index)){ continue; } ``` ``` arr.forEach(function(value,index,arr){ value;//当前值 index;//当前索引 arr;//原数组 }); ``` ## 5. map 方法 ``` arr.map(function (item,index,arr) { return item*10//可以使用return语句来改变相应位置的元素 }) ``` 使用方法和 forEach 十分相似,优缺点也是相似的,IE9+才能使用,如果想在低版本IE运行,可以在原型里添加方法,如下: ``` /** 1. map遍历数组 2. @param callback [function] 回调函数; 3. @param context [object] 上下文; */ Array.prototype.myMap = function myMap(callback,context){ context = context || window; if('map' in Array.prototye) { return this.map(callback,context); } //IE6-8下自己编写回调函数执行的逻辑 var newAry = []; for(var i = 0,len = this.length; i < len;i++) { if(typeof callback === 'function') { var val = callback.call(context,this[i],i,this); newAry[newAry.length] = val; } } return newAry; } ``` > 需要注意的是map方法返回的是一个新的数组,不会改变之前的数组 > 而且break,continue等语句失效,无法提前跳出循环 > 而且map方法是可以使用return语句的 ## 6. for of 循环 > 优点:简洁,可以使用break、continue、return等语句,可以遍历数组、对象、DOM节点数组、Set对象等等 > 缺点:属于ES6的语法内容,使用时应注意兼容性。 ``` for (var value of arr) { //code } ``` --- > 转载自:https://blog.csdn.net/mwl1711883743/article/details/81805573
续费 nowtime.cc 一年 作者: Chuwen 时间: 2019-07-03 分类: 唠嗑闲聊 评论 # 续费 nowtime.cc 域名一年 > ## 嗯,这个暑假要吃吐了 ![Snipaste_2019-07-03_16-46-32.png][1] ![Snipaste_2019-07-03_16-47-57.png][2] [1]: https://cdn.nowtime.cc/2019/07/03/2245497715.png [2]: https://cdn.nowtime.cc/2019/07/03/4229944761.png
[C语言]用递归法求n阶勒让德多项式 作者: Chuwen 时间: 2019-06-02 分类: C/C++ 评论 # 题目 > ## 用递归法求n阶勒让德多项式,递归公式为: ``` { 1 (n=0) Pn(x) = { x (n=1) { ((2n-1)*x-Pn-1(x)-(n-1)*On-2(x))/n (n>=1) ``` ![用递归法求n阶勒让德多项式,递归公式为][1] # 解题思路 1. 要求输入 n 和 x 的值 2. 输出 Pn(x) 的值 # C语言代码实现 ```c #include "stdio.h" int main(){ double legendre(double n, double x);//声名自定义的函数 legendre double n,x; printf("请输入n、x(空格隔开):"); scanf("%lf %lf", &n, &x); printf("结果:%lf", legendre(n, x)); return 0; } double legendre(double n, double x){ double s; if(n == 0){ s = 1; }else if(n == 1){ s = x; }else if(n > 1){ //使用递归 legendre(n-1.0, x)、legendre(n-2.0, x) s = ((2.0*n-1.0)*x-legendre(n-1.0, x)-(n-1.0)*legendre(n-2.0, x))/n; } return s; } ``` # 测试 > ## 输入 n 和 x 的值为:`2` 和 `2` > ## 预想返回结果:`1.5` ``` 请输入n、x(空格隔开):2 2 结果:1.500000 ``` [1]: https://cdn.nowtime.cc/2019/06/02/4033601759.jpg
C 语言 | 求 3x3 矩阵对角线之和 作者: Chuwen 时间: 2019-05-16 分类: PHP 评论 # C 代码如下: ```c #include //求3x3的整型矩阵对角线之和 int main(){ int i,sum1=0,sum2=0; int arr[3][3]={{1,9,5}, {2,6,8}, {4,5,7}}; //第一个对角线(左上 至 右下):0,0 1,1 2,2 //第二个对角线(右上 至 左下):0,2 1,1 2,0 //相加的和为:1+6+7 + 5+6+4 = 29 for(i=0; i<3; i++){ sum1 += arr[i][i];//<左上 至 右下> 之和 sum2 += arr[i][-(i-3)];//<右上 至 左下> 之和。3 指的是数组“列”长度 } printf("两个对角线之和为:%d", sum1+sum2); return 0; } ``` # 运行结果: ``` 两个对角线之和为:29 -------------------------------- Process exited after 0.1137 seconds with return value 0 请按任意键继续. . . ```
C 语言输出 杨辉三角 作者: Chuwen 时间: 2019-05-16 分类: C/C++ 评论 # 原理自己看下注释,最好是自己在纸上写出几行(如 6 行),寻找规律(每个数等于它上方两数之和。) > ## 关于`杨辉三角,请查看 [杨辉三角-百度百科][1] # C 代码: ```c #include int main() { // row:表示 行 // column:表示 列 int row,column; //设置 <第0行第0列> 值为1 //设置 <第1行第0列、第1列> 值为1 int arr[10][10]={{1}, {1,1}}; for(row=2; row<10; row++){ arr[row][0] = 1;//设置第 row 行第 0 列的值为 0 for(column=1; column + 上一行<该列> 的值 //例如:row=2, column=1,则 arr[2][1] 的值为 //arr[2-1][1-1]+arr[2-1][1] arr[row][column] = arr[row-1][column-1]+arr[row-1][column]; } arr[row][column] = 1;//设置第 row 行第 column 列的值为 1 } printf("输出<10行>杨辉三角:\n"); for(row=0; row<10; row++){ for(column=0; column<10; column++){ if(arr[row][column] != 0){//输出值不为0的数 printf("%4d", arr[row][column]); } } printf("\n"); } } ``` [1]: https://baike.baidu.com/item/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/215098