• 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的 数据结构

    一、js 数据集合类 的  数据类型:   数据结构都是基于  数据类型  实现的。

    重点:个人理解,数据结构就是储存数据的结构(如:数组、对象、set、map) 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

        map 的使用场景:https://www.jianshu.com/p/e6bc5a770b7a(推荐)

      理解:map数据类型就是弥补了  对象 属性名 只能字符串的限制。在字典数据结构上优势就很明显,键值对的键可以是数字,不需要把字符串再转成数字。

    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'

    二、数据结构:

    1、字典【key-value】:数据处理中 字典类的数据处理是比较多的。

      场景:  比如 地区码 对应 地区名称。使用字典数据结构 处理会方便点。

      a、 一般我们从后端获取到的数据结构是一个数组,如

    [{code:0001,city:'杭州'},{code:0002,city:'上海'},{code:0003,city:'南昌'}]

    ·  直接处理这种结构,总是要做一个循环,根据一个code值,去查对应的地区。如果把这种数据变成 字典 的数据结构。直接通过code值,获取到对应的地区。如下,字典结构:

    {'0001':'杭州','0002':'上海','0003':'南昌'}

      b、js中可以实现 字典的 数据结构的 有几种方式:数组型的字典、对象型的字典、映射型(Map)型的字典。

    // 数组型 字典
    let arrList = []
    arrList['0001'] = '杭州'
    arrList['0002'] = '上海'
    arrList['0003'] = '南昌'
    
    // 对象型 字典
    let arrList = {}
    arrList['0001'] = '杭州'
    arrList['0002'] = '上海'
    arrList['0003'] = '南昌'
    
    // 映射型 字典
    let arrList = new Map()
    arrList.set('0001', '杭州')
    arrList.set('0002', '上海')
    arrList.set('0003', '南昌')

      扩展知识:js的数组 如果 手动设置下边的话,这个数值就不能按照正常的数组来使用。因为数组长度可能就不准确了。  https://www.cnblogs.com/goloving/p/9180588.html

    let arr = []
    // 如果下边是字符串
    arr['name'] = 'nice' // arr.length = 0
    
    // 如果下标是 数字,以最大的下标表示 length
    arr[80] = 'ueue'  // arr.length = 81

  • 相关阅读:
    [Oracle] CPU/PSU补丁安装详细教程
    weblogic 升级bsu_Weblogic补丁升级之坑坑洼洼
    weblogic补丁下载与安装补丁的方法
    weblogic补丁安装失败
    【项目】项目56
    【项目】项目55
    【项目】项目54
    【项目】项目53
    【项目】项目52
    【项目】项目51
  • 原文地址:https://www.cnblogs.com/wfblog/p/9853415.html
Copyright © 2020-2023  润新知