js的 算法 和 数据结构
js的 算法
1、对一个对象数组按照对象某个属性进行排序 : https://www.cnblogs.com/webcabana/p/7460038.html
在做公交的项目中就碰到过这种算法问题,从后台请求回来的一大堆的数据,都需要前端处理。所以就把这个问题写进博客里。
只要是 js的sort()方法 的使用:https://www.cnblogs.com/fnz0/p/7680297.html
sort()方法 的执行过程:
(个人分析) sort()函数的 比较函数,在执行时,js程序会依次把 数组的项,两个两个的传递给比较函数的形参。
根据比较函数的返回值 是否大于0,再决定传递进来的这两项是否要对换位置。
arr.sort(function(a,b){
return a-b; // return的值为 正或0,则数组中a、b对应的实参 不调换位置。
}); // return的值为 负,则数组中a、b对应的实参 调换位置。
通过测试,发现数组arr中的取某两个项的组合,并没有全部都进入了比较函数中(这个内部是怎么实现的,我们可以不用深究),
但是最后的结果就是按照顺序return中要求的比较的规则进行排序了。
var arr = [4,3,8,2,6];
console.log("起始",arr);
arr.sort(function(a,b){
console.log(a,b); // 这里输出的并没有把arr所有的组合全部都执行了一遍比较函数,内部肯定通过某种方式实现了最少次的比较,得到数值所有项按照顺序排列。
return a-b; // 这里内部具体是通过什么机制实现的最少次比较的,可以不用太过深究
});
// 4 3
// 4 8
// 8 2
// 4 2
// 3 2
// 8 6
// 4 6
2、冒泡排序(将数值按照大小顺序进行排列): https://www.cnblogs.com/dushao/p/6004883.html
3、数组中的最小值和最大值:https://www.cnblogs.com/zhouyangla/p/8482010.html 或 https://www.cnblogs.com/ywx354980-bk/p/8718541.html
a、排序法:
b、js中Math 对象的 min 和 max 方法 :
min 和 max 方法的参数都是数值,而不是数组。所以要利用min和max方法必须要把数组的值一个一个取出来作为参数。
apply方法 的第二个参数是数组,传递到 劫持(继承)对象方法的参数, 是数组中的值一个一个传递过去(而不是一个对象)。即 apply数组参数 --> 继承对象方法的arguments。而对象的参数是 arguments[ i ]
注:不过es6中有一个 展开运算符(...),可以将数值或对象两边的 [] 或 {} 去掉的功能。所以min 和 max可以通过 展开运算符 直接实现。
4、数组中所有的值 与 一个已知值的 的差值的最小值:
个人体会:算法基本 和 数组有关,所以数组有关的API要熟练。
总结:一般在js中涉及到的算法就 排序算法、二分查找、动态规划(最好避免使用递归的算法,效率太低了,容易引起浏览器假死状态)
别人的关于js算法的博客:
1、JS常见的算法 : https://www.cnblogs.com/lvmylife/p/7208541.html
js的 数据结构
重点:个人理解,数据结构就是储存数据的结构(如:数组、对象。这里只考虑原生的数据结构,不考虑基本类型的数据结构) https://www.cnblogs.com/zai1/p/11216368.html
1、数组:省略
2、对象: js 对象的属性名是包括空字符串在内的所有字符串,所以对象的属性名可以是中文。
调用对象的方式,两种: 第二种 方式中,属性名是可以动态设置。
stooge.first_name 、
stooge[“first_name”]
3、集合(set):https://www.runoob.com/w3cnote/es6-map-set.html 类似于数组的储存,放在一个集合里
let mySet = new Set();
mySet.add(1); // Set(1) {1}
mySet.add(5); // Set(2) {1, 5}
mySet.add(5); // Set(2) {1, 5} 这里体现了值的唯一性
mySet.add("some text");
// Set(3) {1, 5, "some text"} 这里体现了类型的多样性
4、映射(Map):https://www.runoob.com/w3cnote/es6-map-set.html (Map 对象保存键值对)
Map对象和数组有什么区别呢? https://blog.csdn.net/chenna1102cn/article/details/74931966 或 https://www.jb51.net/article/135685.htm
Map 和 数组(二维数组) 可以互相转化。https://blog.csdn.net/z9061/article/details/83413015
map 与 原生对象区别 :https://www.cnblogs.com/mengfangui/p/9934849.html
var myMap = new Map();
var key = "a string"; myMap.set(key, "和键'a string'关联的值"); // 这里的key可以是任意数据类型 myMap.get(key); // "和键'a string'关联的值"
myMap.get("a string"); // "和键'a string'关联的值"
// 因为 key === 'a string'

js的 算法 和 数据结构的更多相关文章
- 用js来实现那些数据结构及算法—目录
首先,有一点要声明,下面所有文章的所有内容的代码,都不是我一个人独立完成的,它们来自于一本叫做<学习JavaScript数据结构和算法>(第二版),人民邮电出版社出版的这本书.github ...
- 用js来实现那些数据结构—目录
首先,有一点要声明,下面所有文章的所有内容的代码,都不是我一个人独立完成的,它们来自于一本叫做<学习JavaScript数据结构和算法>(第二版),人民邮电出版社出版的这本书.github ...
- 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- LeetCode_算法及数据结构覆盖统计
[输入]共计151道题的算法&数据结构基础数据 (见附录A) [输出-算法]其中有算法记录的共计 97道 ,统计后 结果如下 top3(递归,动态规划,回溯) 递归 动态规划 回溯 BFS ...
- JavaScript算法与数据结构知识点记录
JavaScript算法与数据结构知识点记录 zhanweifu
- Linux内核中的算法和数据结构
算法和数据结构纷繁复杂,但是对于Linux Kernel开发人员来说重点了解Linux内核中使用到的算法和数据结构很有必要. 在一个国外问答平台stackexchange.com的Theoretica ...
- Python算法与数据结构--求所有子数组的和的最大值
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...
- 【算法与数据结构专场】BitMap算法基本操作代码实现
上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...
随机推荐
- AT2070 Card Game for Three(组合数学)
传送门 解题思路 前面的思路还是很好想的,就是要枚举最后一个\(a\)在哪出现算贡献,之后我先想的容斥,结果彻底偏了..后来调了很久发现自己傻逼了,似乎不能容斥,终于走上正轨23333.首先可以写出一 ...
- AcWing 257. 关押罪犯 (并查集)打卡
题目:https://www.acwing.com/problem/content/description/259/ 题意:有两个监狱,监狱里面有很多犯人,现在有很多对冲突,还有个冲突值,现在问我们怎 ...
- Bugku | Easy_Re
学到一个函数: _mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34)); ...
- [CSP-S模拟测试]:reverse(模拟)
题目传送门(内部题56) 输入格式 第一行包含一个整数:$T$,表示数据组数.接下来$T$行,每行包含两个字符串:$a\ b$. 输出格式 对于每组数据,如果存在$c$,输出最长的情况下字典序最大的$ ...
- 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存在影响
原文地址 背景 开发过程中遇到问题,简单写个demo 运行环境为Chrome 68 描述一下这个问题,当a标签内部存在嵌套时, 父元素a标签的href默认行为以及子元素绑定的click事件的响应之间存 ...
- 2018-2019-2 实验三 敏捷开发与XP实践
实验内容 1.XP基础 2.XP核心实践 3.相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写 ...
- Workflow:Workflow 百科
ylbtech-Workflow:Workflow 百科 工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”.是对工作流程及其各操作步骤之间业务规则的抽象.概括描述.在计 ...
- vue项目在IE下显示空白打不开问题
近期遇到了项目是vue做的,在IE浏览器下打不开,显示空白问题,解决方案如下: 打不开的原因是因为少了babel-polyfill处理器,所以第一步需要下载: npm install babel-po ...
- swoole 安装与简单应用
方法一:PECL安装 安装依赖包 apt-get install libpcre3 libpcre3-dev 安装swoole pecl install swoole 修改PHP配置 php.ini ...
- CSL 的密码(后缀数组)
CSL 的密码 题目传送门 解题思路 后缀数组.对于每一个后缀\(k\)都有\(n - k + 1\)个前缀,把所有不和前一个(排序后的)公共且长度大于\(m\)的前缀个数加起来. 代码如下 #inc ...