zoukankan      html  css  js  c++  java
  • js知识点~数组快速声明,数组查找当前值对应的范围,数组去重,数组对象去重

    1、快速声明一个数组,长度为 100,元素全是 0? 

    // 第一种:
    new Array(101).join(0).split('')
        /*
            new Array(101).join(0).split('')
            ** 注意:101 数字,将要比想创建的长度 + 1
                split括号中,一定要引号中间不留空格,否则不出想要的结果
                返回的结果为字符串0
        */
    
    // 第二种:
    Array.apply(null, { length: 100 }).fill(0)
        /*
            Array.apply(null, { length: 100 }).fill(0)
            ** 注意:
                数组fill函数,为数组填充,且为浅拷贝,
                arr.fill(value, start, end)
        */
    
    // 第三种:
    Array(100).fill(0)
    
    // 第四种:
    [...Array(100).fill(0)]
    
    // 第五种:
    Array.from({length: 100}, _ => 0)
        /*
            Array.from({length: 100}, _ => 0)
            ** 注意:
                _仅为箭头函数替代
        */

     2、查找某个值的范围,返回其对应的状态,

      例如:在使用echart图表时,使用

    /**
        @param array整型数组,且已经按照从小到大排好了序的
        @param val 传入的值
        @return 返回对应范围的下标
        ** 说明:
        根据指定的值,在array查找第一个比它大的值,返回对应的索引,通过索引在voltageDataType获取对应的类型
        1:如果值小于array最小的值时,则获取最低类型。所以voltageDataType前被赋予了个0
        2:如果值大于array最大的值时,则类型最高一档
    
        ** vue 请使用vue调用方法
    */
    function searchIndexType(array, val) {
        // 如果值小于array最小的值时,则获取最低档类型
        if (val < Math.min.apply(null, array)) {
            return 0
        }
    
        // 如果值大于array最大的值时,则类型最高一档
        if (val > Math.max.apply(null, array)) {
            return array.length - 1
        }
    
        var idx = 0; var i = 0; var j = array.length
        for (i; i < j; i++) {
            if (array[i] > val) {
                idx = i
                break
            }
        }
        return idx
    }
    
    /*
        调用:给一个值,判断其对应的范围,以及其对应的颜色值
        说明:
            voltageData 取值的范围
            voltageDataType 取值范围对应的描述
            voltageDataColor 取值范围对应的颜色值
    */
    const voltageData = [2.5, 2.8, 3.0, 3.45, 3.6, 3.7]
    const voltageDataType = ['极低', '过低', '较低', '正常', '较高', '过高', '极高']
    const voltageDataColor = ['#3d60f1', '#8867d2', '#d0bbff', '#90c223', '#ffb643', '#f98182', '#e64848']
    const basicData = voltageDataType[searchIndexType(voltageData, 3)]
    const basicDataColor = voltageDataColor[searchIndexType(voltageData, 3)]
    
    console.log('对应范围描述的取值==>', basicData)
    console.log('对应范围颜色的取值==>', basicDataColor)

     3、数组去重的10种方法(推荐:方法10)

    let arrData = [1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4];
        console.log("原始数组=>", arrData);
        /**
         * 方法1
         * 思路:定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。
         *
         */
        function unique(arr) {
            let newArr = [arr[0]];
            for (let i = 1; i < arr.length; i++) {
                let repeat = false;
                for (let j = 0; j < newArr.length; j++) {
                    if (arr[i] === newArr[j]) {
                        repeat = true;
                        break;
                    } else {
    
                    }
                }
                if (!repeat) {
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }
    
        console.log("1、去重后数组=>", unique(arrData));
        // 结果是[1, 2, 3, 5, 6, 7, 4]
    
        /**
         * 方法2
         * 思路:先将原数组排序,在与相邻的进行比较,如果不同则存入新数组。
         *
         */
        function unique2(arr) {
            var formArr = arr.sort()
            var newArr = [formArr[0]]
            for (let i = 1; i < formArr.length; i++) {
                if (formArr[i] !== formArr[i - 1]) {
                    newArr.push(formArr[i])
                }
            }
            return newArr
        }
        console.log("2、去重后数组=>", unique2(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法3
         * 思路:利用对象属性存在的特性,如果没有该属性则存入新数组。
         *
         */
        function unique3(arr) {
            var obj = {}
            var newArr = []
            for (let i = 0; i < arr.length; i++) {
                if (!obj[arr[i]]) {
                    obj[arr[i]] = 1
                    newArr.push(arr[i])
                }
            }
            return newArr
        }
        console.log("3、去重后数组=>", unique3(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法4
         * 思路:利用数组的indexOf下标属性来查询。
         * 
         */
        function unique4(arr) {
            var newArr = []
            for (var i = 0; i < arr.length; i++) {
                if (newArr.indexOf(arr[i]) === -1) {
                    newArr.push(arr[i])
                }
            }
            return newArr
        }
        console.log("4、去重后数组=>", unique4(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法5
         * 思路:利用数组原型对象上的includes方法。
         * 
         */
        function unique5(arr) {
            var newArr = []
            for (var i = 0; i < arr.length; i++) {
                if (!newArr.includes(arr[i])) {
                    newArr.push(arr[i])
                }
            }
            return newArr
        }
        console.log("5、去重后数组=>", unique5(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法6
         * 思路:利用数组原型对象上的 filter 和 includes方法。
         * 
         */
        function unique6(arr) {
            var newArr = []
            newArr = arr.filter(function (item) {
                return newArr.includes(item) ? '' : newArr.push(item)
            })
            return newArr
        }
        console.log("6、去重后数组=>", unique6(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法7
         * 思路:利用数组原型对象上的 forEach 和 includes方法。
         * 
         */
        function unique7(arr) {
            var newArr = []
            arr.forEach(item => {
                return newArr.includes(item) ? '' : newArr.push(item)
            });
            return newArr
        }
        console.log("7、去重后数组=>", unique7(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法8
         * 思路:利用数组原型对象上的 splice 方法。
         * 
         */
        function unique8(arr) {
            var i, j, len = arr.length;
            for (i = 0; i < len; i++) {
                for (j = i + 1; j < len; j++) {
                    if (arr[i] == arr[j]) {
                        arr.splice(j, 1);
                        len--;
                        j--;
                    }
                }
            }
            return arr;
        }
        console.log("8、去重后数组=>", unique8(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法9
         * 思路:利用数组原型对象上的 lastIndexOf 方法。
         * 
         */
        function unique9(arr) {
            var res = [];
            for (var i = 0; i < arr.length; i++) {
                res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]);
            }
            return res;
        }
        console.log("9、去重后数组=>", unique9(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]
    
        /**
         * 方法10
         * 思路:利用 ES6的set 方法。
         * 
         */
        function unique10(arr) {
            //Set数据结构,它类似于数组,其成员的值都是唯一的
            return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组
        }
        console.log("10、去重后数组=>", unique10(arrData));
        // 结果是[1, 2, 3, 4, 5, 6, 7]

     4、数组对象去重的4种方法(推荐:方法2,方法4) 

    let arrData = [
            { name: 'a', id: 1 },
            { name: 'a', id: 2 },
            { name: 'b', id: 3 },
            { name: 'c', id: 4 },
            { name: 'c', id: 6 },
            { name: 'b', id: 6 },
            { name: 'd', id: 7 }
        ];
        console.log("原始数组对象=>", arrData);
    
        /**
         * 方法1
         * 思路:es5冒泡排序法,去重arr
         * @param arr 为数组
         * @param type 根据某个字段去重
         */
        function duplicateRemoval1(arr, type) {
            let newArr = JSON.parse(JSON.stringify(arr));
            for (let i = 0; i < newArr.length - 1; i++) {
                for (let j = i + 1; j < newArr.length; j++) {
                    if (newArr[i][type] == newArr[j][type]) {
                        newArr.splice(j, 1);
                        // 因为数组长度减小1,所以直接 j++ 会漏掉一个元素,所以要 j--
                        j--;
                    }
                }
            }
            return newArr;
        }
    
        console.log("1、根据id去重后数组对象=>", duplicateRemoval1(arrData, "id"));
        console.log("1、根据name去重后数组对象=>", duplicateRemoval1(arrData, "name"));
    
        /**
         * 方法2
         * 思路:利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值
         * @param arr 为数组
         * @param type 根据某个字段去重
         */
        function duplicateRemoval2(arr, type) {
            let newArr = JSON.parse(JSON.stringify(arr));
            var obj = {};
            newArr = newArr.reduce(function (item, next) {
                obj[next[type]] ? '' : obj[next[type]] = true && item.push(next);
                return item;
            }, []);
            return newArr;
        }
        console.log("2、根据id去重后数组对象=>", duplicateRemoval2(arrData, "id"));
        console.log("2、根据name去重后数组对象=>", duplicateRemoval2(arrData, "name"));
    
    
        /**
         * 方法3
         * 思路:利用对象访问属性的方法,判断对象中是否存在key
         * @param arr 为数组
         * @param type 根据某个字段去重
         */
        function duplicateRemoval3(arr, type) {
            let result = [];
            let obj = {};
            for (let i = 0; i < arr.length; i++) {
                if (!obj[arr[i][type]]) {
                    result.push(arr[i]);
                    obj[arr[i][type]] = true;
                }
            }
            return result
        }
        console.log("3、根据id去重后数组对象=>", duplicateRemoval3(arrData, "id"));
        console.log("3、根据name去重后数组对象=>", duplicateRemoval3(arrData, "name"));
    
        /**
         * 方法4
         * 思路:es6的Map()
         * @param arr 为数组
         * @param type 根据某个字段去重
         */
        function duplicateRemoval4(arr, type) {
            let newArr = JSON.parse(JSON.stringify(arr));
            let map = new Map();
            for (let item of newArr) {
                if (!map.has(item[type])) {
                    map.set(item[type], item);
                }
            }
            return [...map.values()];
        }
        console.log("4、根据id去重后数组对象=>", duplicateRemoval4(arrData, "id"));
        console.log("4、根据name去重后数组对象=>", duplicateRemoval4(arrData, "name"));
  • 相关阅读:
    引入其他字体库 和 字体样式设置
    onmousemove鼠标截取
    最大、最小值
    ruby环境sass编译中文出现Syntax error: Invalid GBK character错误解决方法
    时间戳
    JS性能优化 -- 函数节流
    css兼容问题
    上传文件(ajax结合form表单)
    文件下载
    input上传指定类型的文件
  • 原文地址:https://www.cnblogs.com/songmeiling/p/11897153.html
Copyright © 2011-2022 走看看