arr

es6 filter() 数组过滤方法总结

走远了吗. 提交于 2019-12-03 15:36:42
1.创建一个数组,判断数组中是否存在某个值 var newarr = [ { num: 1, val: 'ceshi', flag: 'aa' }, { num: 2, val: 'ceshi2', flag: 'aa2' } ] console.log(newarr.filter(item => item.num===2 )) 2.也可以通过上面方法过滤掉num为2的留下num为1的 var newarr = [ { num: 1, val: 'ceshi', flag: 'aa' }, { num: 2, val: 'ceshi2', flag: 'aa2' } ] console.log(newarr.filter(item => item.num!=2 )) 3.去掉空数组空字符串、undefined、null var arr = ['1','2',undefined, '3.jpg',undefined] var newArr = arr.filter(item => item) console.log(newArr) var arr = ['1','2',null, '3.jpg',null] var newArr = arr.filter(item => item) console.log(newArr) >//空字符串里面不能包含空格 var arr = ['1',

ES6 之reduce的高级技巧

浪尽此生 提交于 2019-12-03 15:35:09
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。reduce() 方法接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce() 的数组。 reduce() 的几个强大用法: 数组求和 var total = [ 0, 1, 2, 3 ].reduce(( acc, cur ) => { return acc + cur }, 0); console.log(total) // 6 二维数组转为一维数组 var array = [[1, 2], [3, 4], [5, 6]].reduce(( acc, cur ) => { return acc.concat(cur) }, []); console.log(array) // [ 0, 1, 3, 4, 5, 6 ] 计算数组中每个元素出现的次数 1. 方法一 let names = ['tom', 'jim', 'jack', 'tom', 'jack']; const countNames = names.reduce((allNames, name) => { if (name in allNames) { allNames[name] ++; } else { allNames[name] = 1; } return

前端面试题总结

可紊 提交于 2019-12-03 14:53:29
1. 数组的反转   1.1 利用数组的Array.reverse()方法  var arr=[1,2,3,4,5,6,7,8];    arr.reverse();//[8, 7, 6, 5, 4, 3, 2, 1]   1.2 function turn(){ var arr1=[1,2,3,4,5,6,7,8]; for(var i = 0;i<arr1.length/2;i++){ var temp=arr1[i]; arr1[i] = arr1[arr1.length-1-i]; arr1[arr1.length-1-i] = temp; } } turn(); 2. 一个数组对象,获取其中的某个属性中的最大值,并且按照从大到小的顺序排序,有几种方法? 1. 方法一 for 循环遍历    var arr = [{ name : 'qqq', age : '111'}, {name : 'qqq', age : '13' }, { name : 'qqq', age : '1' }, { name : 'qqq', age : '17' }, { name : 'qqq', age : '21' }, { name : 'qqq', age : '16' }]; let maxArr=[]; let max; let serchMax= function (arrays)

array_column()用法

我怕爱的太早我们不能终老 提交于 2019-12-03 13:26:01
<?php $arr = [ [ 'id' => 1, 'name' => 'a' ],[ 'id' => 2, 'name' => 'b', ], [ 'id' => 4, 'name' => 'c' ], [ 'id' => 3, 'name' => 'd' ] ]; print_r(array_column($arr,'name')); //运行结果:Array ( [0] => a [1] => b [2] => c [3] => d ) print_r(array_column($arr,'name','id')); //运行结果:Array ( [1] => a [2] => b [4] => c [3] => d ) print_r(array_column($arr, null, 'name')); //运行结果:Array ( [a] => Array ( [id] => 1 [name] => a ) [b] => Array ( [id] => 2 [name] => b ) [c] => Array ( [id] => 4 [name] => c ) [d] => Array ( [id] => 3 [name] => d ) ) 来源: https://www.cnblogs.com/gyrgyr/p/11796907.html

快速排序详解

被刻印的时光 ゝ 提交于 2019-12-03 13:15:01
快速排序:可以对一个数组或者是对数组中的一段进行排序 思想: 选择一个base, 然后通过一顿瞎操作, 使得 当前数组变成 左小,base, 右大 (小,大,都是相对于base 来说的) 然后使用同样的方法将 上一步的左小 排成 左小,base, 右大的格式, 将 上一步的右大 也排成 左小,base, 右大的格式 这样不断的进行,最终变成了一个有序的数组(从思想中可以发现这个是将大问题不断转换为一个个的小问题,所以可以 使用递归实现) 实现: 因为上面说了这个可以通过递归实现, 所以我只需要弄清楚一层的 左小,base, 右大 的实现即可 选择数组最左边的数为base,然后生成两个指针left, right,分别指向数组的左边和右边,根据左边指针的作用 是 将左边的数都变成比base 小的数 , 所以左边指针left 在移动的时候,发现比base 大的数字的时候,异常出现了 同理右边指针right的作用是 将右边的数字都变成比base 大的数 , 所以右边指针right 移动的时候,发现比base 小的 数字的时候, 异常出现了 ,那么怎么处理呢? 将left 指向的数字,和right 指向的数字进行相互的交换, 就使得左右两边 暂时满足 开始的愿望, 左小右大 ,直到两个指针相遇的时候。两个指针相遇了, 那么这个不是之前的异常了,问题出现了, 两者相遇的时候,这个值为多大

ES6 扩展运算符

前提是你 提交于 2019-12-03 12:42:03
扩展运算符用3个点表示,功能是把数组或者类数组对象展开成一系列用逗号隔开的值 1,数组 let arr = ['red', 'green', 'blue']; console.log(...arr);//red,green,blue 拷贝数组(和Object.assign一样都是浅拷贝) let arr = ['red', 'green','blue']; let arr2=[...arr]; console.log(arr2);//['red', 'green','blue'] 2,对象 拷贝对象(和Object.assign一样都是浅拷贝) let json = { name: 'lisi', age: 21 }; let json2 = { ...json }; console.log(json2);//name lisi,age 21 来源: CSDN 作者: yuyongkun4519 链接: https://blog.csdn.net/yuyongkun4519/article/details/84924584

数组API

流过昼夜 提交于 2019-12-03 12:12:52
1.arr.join("自定义字符串") 将数组中的每个元素转化为字符串,可以自定义连接 无缝连接 arr.join("")里面不用东西, 2.拼接 arr.concat(value1, value2 , arr)将其他元素或者另外一个数组拼接当前数组的结尾 var arr1 = [1,2,3] var arr2 = [4,5,6] arr1.concat(arr2) (1,2,3,4,5,6) concat无权修改数组,只能返回新数组,必须使用变量接受拼接返回的值 concat会打散参数中的子数组为单个元素,单个拼接 3.选取 arr.slice(starti,endi)选取stati位置开始到endi位置的所有元素,组成临时子数组 var arr = [1,2,3,4,5,6,7,8,9] arr.slicde(3,6) (4,5,6) 下标含头不含尾 , slice无权修改数组 , 支持负参数 length - n 省略第二个参数表示从指定位置开始一直截取到结尾 4.数组的修改(删除, 插入, 替换) a.删除 arr.splice(starti,n) 删除arr中starti开始的n个元素 var arr = [1,2,3,4,5,6] arr.splice(3,5) (4,5,6) 修改了原数组 支持负参数 b.插入 arr.splice(starti, 0,

20182328 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结

倖福魔咒の 提交于 2019-12-03 12:08:55
20182328 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结 教材学习内容总结 查找 查找的概念:查找是在一组项内找到指定目标或是确定目标不存在的过程 线性查找:从数组表头开始,依次将某个值与目标元素比较,最后找到目标或者目标不存在于数组中 核心代码 private static int search(int[] arr, int key) { int index = -1; int i = 0; for (int n : arr) { if (n==key){ index=i; break; } i++; } return index; } 二分查找:将表中间位置的元素与目标元素比较,如果两者相等,则查找成功;否则利用中间位置将表分成前、后两个子表,如果中间位置元素大于目标元素,则进一步查找前一子表,否则进一步查找后一子表。 核心代码 public static int search(int[] nums, int num) { int low = 0; int high = nums.length - 1; while (low <= high) { int mid = (low + high) / 2; if (num > nums[mid]) { low = mid + 1; } else if (num < nums[mid]) { high =

关于八大基本排序方法的总结(c++版)

拥有回忆 提交于 2019-12-03 11:43:02
#include <iostream> #include <ctime> using namespace std; /*** * 排序算法的总结: * 排序分为稳定排序和不稳定排序 * 稳定排序:相同的值的位置在排序过程中不会发生改变 * 非稳定排序:相同的值的相对位置也许会在算法结束时产生变动 * 1、冒泡排序:什么叫冒泡排序?O(n^2) * 主要的思想就是:1>、每次比较相邻的元素,如果前者大于后者就将它们的值进行交换 * 依次循环n-1次就行--->因为每次循环都把最大的元素放在了最后面,n-1次后最前面的元素自然是最小的了 * 下面是主要的逻辑代码: * for(int i=0;i<9;++i) { for(int j=0;j<9;++j) { if(arr[j]>arr[j+1]) swap(arr[j],arr[j+1]); } } *2、接下来介绍的就是选择排序法: × 应用范围:适合于小规模的排序算法中,因为它的时间复杂度为n^2,每次都要循环遍历一遍数组才能确定一个值,如果有n个值每个数都要进行n次循环,从而算法的时间复杂度为n*n=n^2 *何为选择排序法呢?------>所谓的选择就是从第n个元素开始 * 每次从n后的数组中找到一个最小或者最大的元素与第n个元素进行交换 * 从而可以确保最前面的元素一定是最小的元素,依次往后增加 * 下面是主要的逻辑代码:

作业八

五迷三道 提交于 2019-12-03 11:26:51
20182302 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结 教材学习内容总结 树结构 1、一对多关系的复杂结构(例:家谱、单位组织结构、DNS结构、人机大战) IP地址可变,通过解析DNS得到新IP 2、getroot();grtparent();getChildCount();getFirstChild;getNextChild(); 3、双亲表示法 孩子表示法 双亲孩子表示法(孩子兄弟表示法(仅作了解)) 4二叉树 结点度数至多为2; 有序树:子树有左右之分 二叉树第i层最多有2^i-1个结点 深度为k的二叉树最多有2^k-1个结点 对于任何一颗二叉树,如果其叶结点个数为n0,度为2的节点数为n2 则n0=n2-12 查找 线性查找: 1、查找性能评价:平均查找长度ASL ASL=(求和)p(i)*c(i) 查找第n个元素比较次数和时间乘积 折半查找(必须有序) 1、 n/2^m=1;m为查找次数0 分块查找 1、起点+该块最大值/最小值 2、效率位于前两者之间 哈希表 1、 x%y=5,则将x放于5号位 2、31%13=5,18%13=5 (直接定址法: 数字分析法 平方取中法)自行设计 除留余数法 3、解决冲突方法(1)开放定址法不断+1直至找到空 (2)再哈希(不要求掌握)(3)链地址法建立 排序 1、插入排序(例如打牌理牌过程) 直接插入