<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決

            本篇內(nèi)容主要講解“JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決”吧!

            創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的宣漢網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

            JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決

            一、數(shù)據(jù)的增刪改查

            場(chǎng)景:這是一個(gè)后臺(tái)管理系統(tǒng)——字典管理模塊,包含了數(shù)據(jù)字典的增刪改查4個(gè)操作。那么應(yīng)對(duì)這4個(gè)操作,我們的解決方案是什么呢,請(qǐng)您接著往下看

            JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決

            1、數(shù)組的新增

            arr.push 從數(shù)組后面推入一個(gè)元素或多個(gè)元素

            var arr = [1,2,3];
            // 返回:修改后數(shù)組的長(zhǎng)度
            arr.push(4,5,6);
            console.log(arr)
            //輸出結(jié)果
            arr=[1,2,3,4,5,6]

            arr.unshift 從數(shù)組前面添加一個(gè)或多個(gè)元素

            var arr = [1,2,3];
            // 返回:修改后數(shù)組的長(zhǎng)度
            arr.unshift(4,5,6);
            console.log(arr)
            //輸出結(jié)果
            arr=[4,5,6,1,2,3]

            2、數(shù)組的刪除

            arr.shift 用于將數(shù)組的第一個(gè)元素移除

            // 數(shù)組的shift方法用于將數(shù)組的第一個(gè)元素移除
            var arr = [1,2,3];
            // 返回 被刪除的元素;
            arr.shift();
            //輸出結(jié)果
            arr=[2,3]

            arr.pop 刪除數(shù)組最后一個(gè)元素;

            // 數(shù)組的pop方法用于將數(shù)組的最后一個(gè)元素移除
            var arr = [1,2,3];
            // 返回 被刪除的元素;
            arr.pop();
            //輸出結(jié)果
            arr = [1,2];

            3、數(shù)組的修改

            arr.splice:可進(jìn)行數(shù)組任何位置的增刪改

            具有刪除、插入,替換三個(gè)作用,該方法返回的是一個(gè)數(shù)組(包含從原數(shù)組中刪除的項(xiàng)(若沒(méi)有刪除項(xiàng)則返回一個(gè)空數(shù)組))

            語(yǔ)法

            splice(index,howmany,item1,…itemx);

            • index——必須,整數(shù),規(guī)定添加或者刪除的位置,使用負(fù)數(shù),從數(shù)組尾部規(guī)定位置。

            • howmany——必須,要?jiǎng)h除的數(shù)量,如果為0,則不刪除項(xiàng)目。

            • item1,…itemx——可選,向數(shù)組添加的新項(xiàng)目。

            1. 刪除
            可刪除任意數(shù)量的項(xiàng),只需指定2個(gè)參數(shù):要?jiǎng)h除的第一項(xiàng)的位置和要?jiǎng)h除的項(xiàng)數(shù)。
            
            let arr=[1,2,3];
            let arr1=arr.splice(1,2);//會(huì)刪除數(shù)組的第2和3個(gè)元素(即2,3)
            alert(arr);//[1]
            alert(arr1);//[2,3]
            
            
            2. 插入
            可以向指定位置插入任意數(shù)量的項(xiàng)只需提供3個(gè)參數(shù):起始位置、0(要?jiǎng)h除的項(xiàng)數(shù))、要插入的項(xiàng)。
            let arr=[1,2,3];
            let arr1=arr.splice(1,0,4,5);//會(huì)從數(shù)組的1位置開(kāi)始插入4,5
            alert(arr);//[1,4,5,2,3]
            alert(arr1);//[]
            
            3. 替換
            可以向指定位置插入任意數(shù)量的項(xiàng),且同時(shí)刪除任意數(shù)量的項(xiàng),只需指定3個(gè)參數(shù):起始位置、要?jiǎng)h除的項(xiàng)數(shù)和要插入的任意數(shù)量的項(xiàng)(插入的數(shù)量不必與刪除的數(shù)量相等)
            let arr = [1,2,3];
            let arr1=arr.splice(1,1,"red","green");//會(huì)刪除2,然后從2位置插入字符串"red"和"green"
            alert(arr);//[1,"red","green",3]
            alert(arr1);//[2]

            4、數(shù)組的查找

            arr.indexOf:根據(jù)元素查找索引,如果這個(gè)元素在數(shù)組中,返回索引,否則返回-1,找元素在不在數(shù)組內(nèi)部

            var arr = [10,20,30]
            console.log(arr.indexOf(30));  // 2
            console.log(arr.indexOf(40));  // -1

            arr.findIndex :用于查找滿足條件的第一個(gè)元素的索引,如果沒(méi)有,則返回-1

            var arr = [10, 20, 30];
            var res1 = arr.findIndex(function (item) {
              return item >= 20;
            });
            // 返回 滿足條件的第一個(gè)元素的的索引
            console.log(res1);

            5、數(shù)組與字符串互轉(zhuǎn)

            join 用于將數(shù)組中的多元素以指定分隔符連接成一個(gè)字符串

            var arr = ['用戶1','用戶2','用戶3'];
            var str = arr.join('|'); 
            console.log(str);  //  
            用戶1|用戶2|用戶3

            split 字符串的方法:轉(zhuǎn)數(shù)字,后面為分隔的字符

            // 這個(gè)方法用于將一個(gè)字符串以指定的符號(hào)分割成數(shù)組
            var str = '用戶1|用戶2|用戶3';
            var arr = str.split('|');
            console.log(arr);
            ['用戶1','用戶2','用戶3']

            二、數(shù)據(jù)的排序

            不得不說(shuō),隨著科技的進(jìn)步硬件的發(fā)展,瀏覽器的計(jì)算性能也隨之提升,接下來(lái)我們會(huì)遇到第二種情況——數(shù)據(jù)的排序操作,也就是需要我們?cè)谇岸藢?shí)現(xiàn)各種排序,那么我們的解決方案又有哪些呢,接著往下看~

            JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決

            1、js的自帶函數(shù)arr.sort()

             var arr = [23,34,3,4,23,44,333,444];
                    arr.sort(function(a,b){
                        return  a-b;
                    })
                console.log(arr);

            這里也一并介紹一下常用的幾種排序算法:

            2、插入排序

            var arr = [23,34,3,4,23,44,333,444];
            
            var arrShow = (function insertionSort(array){
            if(Object.prototype.toString.call(array).slice(8,-1) ==='Array'){
            
                for (var i = 1; i < array.length; i++) {
                    var key = array[i];
                    var j = i - 1;
                    while (j >= 0 && array[j] > key) {
                    array[j + 1] = array[j];
                    j--;
                    }
                  array[j + 1] = key;
                }
                return array;
            }else{
            
                return 'array is not an Array!';
            }
            })(arr);
            
            console.log(arrShow);//[3, 4, 23, 23, 34, 44, 333, 444]

            3、二分插入排序

            function binaryInsertionSort(array) {
            if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
            for (var i = 1; i < array.length; i++) {
                var key = array[i], left = 0, right = i - 1;
                while (left <= right) {
                var middle = parseInt((left + right) / 2);
                if (key < array[middle]) {
                right = middle - 1;
            } else {
                left = middle + 1;
            }
            }
            for (var j = i - 1; j >= left; j--) {
                array[j + 1] = array[j];
            }
            array[left] = key;
            }
            return array;
            } else {
                return 'array is not an Array!';
            }
            }

            4、選擇排序

            function selectionSort(array) {
            if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
                var len = array.length, temp;
                for (var i = 0; i < len - 1; i++) {
                var min = array[i];
                for (var j = i + 1; j < len; j++) {
                    if (array[j] < min) {
                    temp = min;
                    min = array[j];
                    array[j] = temp;
                }
              }
                array[i] = min;
            }
             return array;
            } else {
                return 'array is not an Array!';
            }
            }

            5、冒泡排序

            function bubbleSort(array) {
            if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
            var len = array.length, temp;
            for (var i = 0; i < len - 1; i++) {
                for (var j = len - 1; j >= i; j--) {
                    if (array[j] < array[j - 1]) {
                    temp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = temp;
            }
            }
            }
                return array;
            } else {
                return 'array is not an Array!';
            }
            }

            6、快速排序

            //方法一
            function quickSort(array, left, right) {
            if (Object.prototype.toString.call(array).slice(8, -1) === 'Array' && typeof left === 'number' && typeof right === 'number') {
            if (left < right) {
            var x = array[right], i = left - 1, temp;
            for (var j = left; j <= right; j++) {
                if (array[j] <= x) {
                i++;
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
            }
            quickSort(array, left, i - 1);
            quickSort(array, i + 1, right);
            };
            } else {
            return 'array is not an Array or left or right is not a number!';
            }
            }
            var aaa = [3, 5, 2, 9, 1];
            quickSort(aaa, 0, aaa.length - 1);
            console.log(aaa);
            
            
            //方法二
            var quickSort = function(arr) {
              if (arr.length <= 1) { return arr; }
              var pivotIndex = Math.floor(arr.length / 2);
              var pivot = arr.splice(pivotIndex, 1)[0];
              var left = [];
              var right = [];
              for (var i = 0; i < arr.length; i++){
                if (arr[i] < pivot) {
                  left.push(arr[i]);
                } else {
                  right.push(arr[i]);
                }
              }
              return quickSort(left).concat([pivot], quickSort(right));
            };

            7、堆排序

            /*方法說(shuō)明:堆排序
            @param array 待排序數(shù)組*/
            function heapSort(array) {
            if (Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
            //建堆
            var heapSize = array.length, temp;
            for (var i = Math.floor(heapSize / 2); i >= 0; i--) {
            heapify(array, i, heapSize);
            }
            
            //堆排序
            for (var j = heapSize - 1; j >= 1; j--) {
                temp = array[0];
                array[0] = array[j];
                array[j] = temp;
                heapify(array, 0, --heapSize);
            }
            } else {
            return 'array is not an Array!';
            }
            }
            /*方法說(shuō)明:維護(hù)堆的性質(zhì)
            @param arr 數(shù)組
            @param x 數(shù)組下標(biāo)
            @param len 堆大小*/
            function heapify(arr, x, len) {
            if (Object.prototype.toString.call(arr).slice(8, -1) === 'Array' && typeof x === 'number') {
            var l = 2 * x, r = 2 * x + 1, largest = x, temp;
            if (l < len && arr[l] > arr[largest]) {
            largest = l;
            }
            if (r < len && arr[r] > arr[largest]) {
            largest = r;
            }
            if (largest != x) {
                temp = arr[x];
                arr[x] = arr[largest];
                arr[largest] = temp;
                heapify(arr, largest, len);
            }
            } else {
                return 'arr is not an Array or x is not a number!';
            }
            }

            三、數(shù)據(jù)的去重

            好的,當(dāng)我們解決完排序的問(wèn)題,緊接著我們又面臨著數(shù)據(jù)去重的問(wèn)題,不要怕,解決方案依然有很多,請(qǐng)您慢慢往下接著看:

            在工作上,對(duì)json數(shù)據(jù)處理時(shí),例如遇到對(duì)某些產(chǎn)品的尺碼進(jìn)行排序,不同的產(chǎn)品都有相同的尺碼那是正常不過(guò)的事情,如果我們要把這些轉(zhuǎn)成表格的形式來(lái)展現(xiàn),那么這些尺碼就不要不能重復(fù)才行.在這里呢,我就寫(xiě)幾個(gè)數(shù)組去重的方法,給大家參考參考 :

            1、簡(jiǎn)單的去重方法

            // 最簡(jiǎn)單數(shù)組去重法
            /*
            * 新建一新數(shù)組,遍歷傳入數(shù)組,值不在新數(shù)組就push進(jìn)該新數(shù)組中
            * IE8以下不支持?jǐn)?shù)組的indexOf方法
            * */
            function uniq(array){
                var temp = []; //一個(gè)新的臨時(shí)數(shù)組
                for(var i = 0; i < array.length; i++){
                    if(temp.indexOf(array[i]) == -1){
                        temp.push(array[i]);
                    }
                }
                return temp;
            }
            
            var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
            console.log(uniq(aa));

            2、對(duì)象鍵值法去重

            /*
            * 速度最快, 占空間最多(空間換時(shí)間)
            *
            * 該方法執(zhí)行的速度比其他任何方法都快, 就是占用的內(nèi)存大一些。
            * 現(xiàn)思路:新建一js對(duì)象以及新數(shù)組,遍歷傳入數(shù)組時(shí),判斷值是否為js對(duì)象的鍵,
            * 不是的話給對(duì)象新增該鍵并放入新數(shù)組。
            * 注意點(diǎn):判斷是否為js對(duì)象鍵時(shí),會(huì)自動(dòng)對(duì)傳入的鍵執(zhí)行“toString()”,
            * 不同的鍵可能會(huì)被誤認(rèn)為一樣,例如n[val]-- n[1]、n["1"];
            * 解決上述問(wèn)題還是得調(diào)用“indexOf”。*/
            function uniq(array){
                var temp = {}, r = [], len = array.length, val, type;
                for (var i = 0; i < len; i++) {
                    val = array[i];
                    type = typeof val;
                    if (!temp[val]) {
                        temp[val] = [type];
                        r.push(val);
                    } else if (temp[val].indexOf(type) < 0) {
                        temp[val].push(type);
                        r.push(val);
                    }
                }
                return r;
            }
            
            var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
            console.log(uniq(aa));

            3、排序后相鄰去除法

            /*
            * 給傳入數(shù)組排序,排序后相同值相鄰,
            * 然后遍歷時(shí),新數(shù)組只加入不與前一值重復(fù)的值。
            * 會(huì)打亂原來(lái)數(shù)組的順序
            * */
            function uniq(array){
                array.sort();
                var temp=[array[0]];
                for(var i = 1; i < array.length; i++){
                    if( array[i] !== temp[temp.length-1]){
                        temp.push(array[i]);
                    }
                }
                return temp;
            }
            
            var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
            console.log(uniq(aa));

            4、數(shù)組下標(biāo)法

            /*
            *
            * 還是得調(diào)用“indexOf”性能跟方法1差不多,
            * 實(shí)現(xiàn)思路:如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i,
            * 那么表示第i項(xiàng)是重復(fù)的,忽略掉。否則存入結(jié)果數(shù)組。
            * */
            function uniq(array){
                var temp = [];
                for(var i = 0; i < array.length; i++) {
                    //如果當(dāng)前數(shù)組的第i項(xiàng)在當(dāng)前數(shù)組中第一次出現(xiàn)的位置是i,才存入數(shù)組;否則代表是重復(fù)的
                    if(array.indexOf(array[i]) == i){
                        temp.push(array[i])
                    }
                }
                return temp;
            }
            
            var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
            console.log(uniq(aa));

            5、優(yōu)化遍歷數(shù)組法

            // 思路:獲取沒(méi)重復(fù)的最右一值放入新數(shù)組
            /*
            * 推薦的方法
            *
            * 方法的實(shí)現(xiàn)代碼相當(dāng)酷炫,
            * 實(shí)現(xiàn)思路:獲取沒(méi)重復(fù)的最右一值放入新數(shù)組。
            * (檢測(cè)到有重復(fù)值時(shí)終止當(dāng)前循環(huán)同時(shí)進(jìn)入頂層循環(huán)的下一輪判斷)*/
            function uniq(array){
                var temp = [];
                var index = [];
                var l = array.length;
                for(var i = 0; i < l; i++) {
                    for(var j = i + 1; j < l; j++){
                        if (array[i] === array[j]){
                            i++;
                            j = i;
                        }
                    }
                    temp.push(array[i]);
                    index.push(i);
                }
                console.log(index);
                return temp;
            }
            
            var aa = [1,2,2,3,5,3,6,5];
            console.log(uniq(aa));

            四 、平級(jí)列表變成樹(shù)形結(jié)構(gòu)

            吶,在選擇部門(mén)的時(shí)候,是不是會(huì)經(jīng)??吹竭@種樹(shù)狀菜單,后臺(tái)返回的數(shù)據(jù)一般都是平級(jí)的數(shù)組,那么這種菜單,我們一般是怎么生成的呢,請(qǐng)看~~

            JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決

            1、這里特意將方法奉上:

            const dataTree = [
                    {id: 1, name: '總公司', parentId: 0},
                    {id: 2, name: '深圳分公司', parentId: 1},
                    {id: 3, name: '北京分公司', parentId: 1},
                   {id: 4, name: '研發(fā)部門(mén)', parentId: 2},
                    {id: 5, name: '市場(chǎng)部門(mén)', parentId: 2},
                    {id: 6, name: '測(cè)試部門(mén)', parentId: 2},
                    {id: 7, name: '財(cái)務(wù)部門(mén)', parentId: 2},
                    {id: 8, name: '運(yùn)維部門(mén)', parentId: 2},
                    {id: 9, name: '市場(chǎng)部門(mén)', parentId: 3},
                    {id: 10, name: '財(cái)務(wù)部門(mén)', parentId: 3},
                   
                ]
                function changeData(data, parentId = 0) {
                    let tree = [];//新建空數(shù)組
                    //遍歷每條數(shù)據(jù)
                    data.map((item) => {
                        //每條數(shù)據(jù)中的和parentId和傳入的相同
                        if (item.parentId == parentId) {
                            //就去找這個(gè)元素的子集去  找到元素中parentId==item.id 這樣層層遞歸
                            item.children = changeData(data, item.id);
                            tree.push(item);
                        }
                    })
                    return tree
                }
                console.log(changeData(dataTree, 0));

            JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決

            五、數(shù)組對(duì)象相同項(xiàng)合并處理

            我們?cè)趫D表展示的時(shí)候會(huì)經(jīng)常遇到數(shù)據(jù)處理,其中數(shù)組合并處理也會(huì)經(jīng)常遇到,下面就是數(shù)組相同項(xiàng)合并的一種方式:

            JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決

            • 首先由原始的數(shù)組arr數(shù)據(jù),

            • 然后創(chuàng)建一個(gè)map空對(duì)象和一個(gè)result空數(shù)組,通過(guò)判斷map中是否含有某項(xiàng)來(lái)判斷數(shù)組result是否添加數(shù)據(jù),

            • 然后再判斷相同項(xiàng)和已有的result數(shù)組內(nèi)容比較合并;

            1、博主特意將珍藏多年的祖?zhèn)鞔a,在這里奉獻(xiàn)給各位大佬:

              var arr = [
                {"id":"1","name":"車?yán)遄?quot;,"num":"245"},
                {"id":"1","name":"車?yán)遄?quot;,"num":"360"},
                {"id":"2","name":"蘋(píng)果","num":"120"},
                {"id":"2","name":"蘋(píng)果","num":"360"},
                {"id":"2","name":"蘋(píng)果","num":"180"},
                {"id":"3","name":"香蕉","num":"160"},
                {"id":"4","name":"菠蘿","num":"180"},
                {"id":"4","name":"菠蘿","num":"240"}
              ];
              var map = {},result= [];
              for(var i = 0; i < arr.length; i++){
                var ele = arr[i];
                if(!map[ele.id]){
                  result.push({
                    id: ele.id,
                    name: ele.name,
                    value: ele.value
                  });
                  map[ele.id] = ele;
                }else{
                  for(var j = 0; j < result.length; j++){
                    var dj = result[j];
                    if(dj.id == ele.id){
                      dj.value=(parseFloat(dj.value) + parseFloat(ele.value)).toString();
                      break;
                    }
                  }
                }
              };
              console.log(result);

            到此,相信大家對(duì)“JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

            本文名稱:JavaScript數(shù)據(jù)處理的常見(jiàn)問(wèn)題如何解決
            標(biāo)題鏈接:http://www.jbt999.com/article36/pcdhpg.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化面包屑導(dǎo)航、網(wǎng)站維護(hù)網(wǎng)站制作、域名注冊(cè)、網(wǎng)站設(shè)計(jì)

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

            h5響應(yīng)式網(wǎng)站建設(shè)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 好操逼网 | 开心色色网 | 国产一级婬乱片AV片AAA毛片 | 五月婷婷色色网 | 夜夜干天天|