zoukankan      html  css  js  c++  java
  • js 简单算法

    1. 嵌套数组打平并且去重

        var arr = [3,2,4,5,6,1,5,4,[9,5,3,2,[10,4,6]]];
        var obj = {};//去重标识
        function test(data) {
            var newArr = [];
            for ( var i in data) {
                if (data[i] instanceof Array) {
                    return  [].concat(newArr,test(data[i]));
                }else{
                    if(!obj[data[i]]) {
                        obj[data[i]] = true;
                        newArr.push(data[i]);
                    }
                }
            }
            return newArr;
        }
        var data = test(arr);
        console.log(data)//[3, 2, 4, 5, 6, 1, 9, 10]

    2.冒泡排序, 冒泡排序算法就是依次比较大小,小的大的进行位置上的交换

        var arr = [10,20,9,7,30,1,5];
        
        for (var i in arr) {
            for (var j in arr) {
                if (arr[i] > arr[j]){
                    var num = arr[i];
                    arr[i] = arr[j];
                    arr[j] = num;
                }
            }
        }
        console.log(arr);//[30, 20, 10, 9, 7, 5, 1]

    3.快速排序,算法参考某个元素值,将小于它的值,放到左数组中,大于它的值的元素就放到右数组中,然后递归进行上一次左右数组的操作,返回合并的数组就是已经排好顺序的数组了。

        var arr = [10,20,9,7,30,1,5];
        function fun(data) {
            var len = data.length;
            if (len <= 1) {
                return data;
            }
            var num = data[0];//参考元素
            var left = [];
            var right = [];
            for( var i = 1; i < len; i++) {
                if (data[i] < num ) {
                    left.push(data[i]);
                }else{
                    right.push(data[i]);
                }
            }
            return [].concat(fun(left), [num], fun(right));
        }
        console.log(fun(arr)); //[1, 5, 7, 9, 10, 20, 30]

    4. 树形结构数据,根据子级数据的 某个字段,来获取所有的父级

    例如:antd 的 联级选择插件,回显数据,需要从上到下的每一级数据的id, 然后存数据库的,可能只有一个id, 不是一个数组,这个时候我们需要拿到这个id, 倒推所有父级的id

    getInitMenuActive = (id) => {
        const { list } = this.props;
        function fn(data, val) {
          for (let i = 0; i < data.length; i++) {
            if (data[i] && data[i].id === val) {
              return [data[i].id];
            } else
              if (data[i] && data[i].children && data[i].children.length > 0) {
                let ids = fn(data[i].children, val);
                if (ids) {
                  return ids.concat(data[i].id);
                }
              }
          }
        }
        let list = fn(list, id);
        return list ? list : [];
      }
  • 相关阅读:
    【LeetCode】46. 全排列(回溯)
    [P2894][USACO08FEB] 酒店Hotel (线段树+懒标记下传)
    [P2680][NOIP2015T6] 运输计划 (LCA+树上差分+二分)
    静态主席树学习笔记
    [P1941][NOIP2014T3] 飞扬的小鸟 (0/1背包+完全背包)
    [P1084][NOIP2012T6] 疫情控制 (二分+贪心+LCA)
    [P3959][NOIP2017T5] 宝藏 (状压DP+DFS)
    [P2679][NOIP2015T5] 子串 (DP+滚动数组)
    [P1314][NOIP2011T5] 聪明的质检员 (二分+前缀和)
    [P1966][NOIP2013T2] 火柴排队 (求逆序对+归并排序/树状数组)
  • 原文地址:https://www.cnblogs.com/bruce-gou/p/9805791.html
Copyright © 2011-2022 走看看