Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美激情一二三区免费视频,国产一级视频在线,久久精品免费在线观看

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          JavaScript 數(shù)組的常用方法

          我們前端來(lái)說(shuō)數(shù)組作為一個(gè)常用的類型,今天我們講一下在實(shí)際使用中經(jīng)常用到的方法和使用場(chǎng)景。

          concat() 多數(shù)組組合

          concat() 可以用來(lái)連接兩個(gè)或多個(gè)數(shù)組,返回要給新的數(shù)組并且不會(huì)影響之前的數(shù)組。

          使用方法:arr.concat(arr1,arr2,......,arrn) 他的參數(shù)可以是多個(gè)數(shù)組。實(shí)例如下:

          var arr = [1,2,3];
          var arr1 = [4,5,6];
          var arr2 = [7,8,9];
          arr.concat(arr1,arr2)
          
          輸出結(jié)果:
          [1,2,3,4,5,6,7,8,9]

          join()將數(shù)組元素連接到一起

          join()方法是把數(shù)組中所有的元素通過(guò)指定的分隔符連接成一個(gè)統(tǒng)一的字符串。

          實(shí)例如下:

          var arr = ["str1","str2","str3"]
          arr.join("#")
          
          輸出結(jié)果:
          str1#str2#str3

          pop()刪除數(shù)組的最后元素

          pop() 是用來(lái)刪除數(shù)組的最后一個(gè)元素。咱們直接上實(shí)例:

          var arr = ["str1","str2","str3"]
          arr.pop()
          
          輸出結(jié)果:
          ["str1","str2"]

          push()往數(shù)組結(jié)尾添加元素

          push() 方法適用于向數(shù)組的末尾添加一個(gè)或多個(gè)元素。

          使用方法:

          arr.push(obj1,obj2,......objn) 我們可以看到這個(gè)方法可以添加多個(gè)參數(shù)。具體實(shí)例如下:

          var arr = ["str1","str2","str3"]
          arr.push("obj1","obj2","obj3")
          
          輸出結(jié)果:
           ["str1","str2","str3","obj1","obj2","obj3"]
          

          unshift()往數(shù)組開(kāi)頭添加元素

          unshift() 方法適用于向數(shù)組的末尾添加一個(gè)或多個(gè)元素。也可以添加多個(gè)參數(shù)。具體實(shí)例如下:

          var arr = ["str1","str2","str3"]
          arr.unshift("obj1","obj2","obj3")
          
          輸出結(jié)果:
          ["obj1", "obj2", "obj3", "str1", "str2", "str3"

          forEach() 和for()數(shù)組循環(huán)遍歷

          共同點(diǎn):兩者都是用于對(duì)數(shù)組的循環(huán)遍歷

          var arr = ["str1","str2","str3"]
          
          for (let index = 0; index < this.arr.length; index++) {
             const element = this.arr[index];
             console.log(element)
           }
          
          this.arr.forEach(element => {
          	console.log(element)
          });
          
          輸出結(jié)果相同:
           ["str1","str2","str3"]

          不同點(diǎn):for 可以中途中斷 但是forEach不行他會(huì)執(zhí)行完整個(gè)數(shù)組元素

          var arr = ["str1","str2","str3"]
          for (let index = 0; index < this.arr.length; index++) {
            const element = this.arr[index];
            console.log(element)
            if(index==1){
              return
            }
          }
          
          this.arr.forEach(element => {
            console.log(element)
            return
          });
          
          輸出結(jié)果:
           ["str1","str2"]
          輸出結(jié)果:
           ["str1","str2","str3"]
          

          我們看出for函數(shù)只輸出了兩個(gè)值就中斷了 但是forEach確將所有的數(shù)據(jù)都輸出了。整個(gè)地方是特別容易出錯(cuò)并且不容易找出錯(cuò)誤的地方。所以大家一定要區(qū)分開(kāi)兩個(gè)函數(shù)的共同點(diǎn)和區(qū)別。

          map()函數(shù)

          map函數(shù)可以根據(jù)之前的對(duì)象根據(jù)某個(gè)條件進(jìn)行某種變換,生成另外一個(gè)新的對(duì)象。

           let arr=[1,2,3]
           let createArr=arr.map(item=>{
             return item*2
           })
           
           輸出結(jié)果:
           [2,4,6]

          filter() 函數(shù)

          filter函數(shù)用于數(shù)組中獲取過(guò)濾符合條件的所有元素,返回過(guò)濾后的數(shù)組,如果沒(méi)有符合條件的元素則返回空數(shù)組。

          let arr=[1,2,3]
          let arr2=arr.filter(item=>{
            return item.value>1
          })
          
          輸出結(jié)果:
           [2,3]

          find()函數(shù)

          find()函數(shù)查找符合條件的值,不過(guò)有幾點(diǎn)注意事項(xiàng):

          1、返回符合條件的第一個(gè)元素的值,多符合也只是返回一個(gè)。

          2、如果沒(méi)有符合判斷條件的則返回 undefined。

          是poetry,點(diǎn)擊上方“關(guān)注”,每天為你分享前端進(jìn)階與個(gè)人精進(jìn)干貨。

          一、數(shù)組預(yù)覽圖

          二、會(huì)改變?cè)瓟?shù)組的方法

          2.1 push()

          • 方法在數(shù)組的尾部添加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的長(zhǎng)度

          參數(shù): item1, item2, ..., itemX ,要添加到數(shù)組末尾的元素

          let arr = [1,2,3];
          
          let length = arr.push('末尾1','末尾2'); // 返回?cái)?shù)組長(zhǎng)度
          
          console.log(arr,length)
          
          // [1, 2, 3, "末尾1", "末尾2"] 5
          

          返回值: 數(shù)組的長(zhǎng)度

          2.2 pop()

          • 方法刪除數(shù)組的最后一個(gè)元素,減小數(shù)組長(zhǎng)度并返回它刪除的值
          //組合使用push()和pop()能夠用JavaScript數(shù)組實(shí)現(xiàn)先進(jìn)后出的棧
          
          let stack = [];
          
          stack.push(1,2) // 返回長(zhǎng)度2,這時(shí)stack的值是[1,2]
          
          stack.pop() // 返回刪除的值2,這時(shí)stack的值是[1]
          

          返回值: 從數(shù)組中刪除的元素(當(dāng)數(shù)組為空時(shí)返回undefined)。

          2.3 unshift()

          方法在數(shù)組的頭部添加一個(gè)或多個(gè)元素,并將已存在的元素移動(dòng)到更高索引的位置來(lái)獲得足夠的空間,最后返回?cái)?shù)組新的長(zhǎng)度

          let arr = [3,4,5];
          
          let length = arr.unshift(1,2); // 返回長(zhǎng)度是5
          
          console.log(arr, length)
          
          //[1, 2, 3, 4, 5] 5
          

          返回值: 返回?cái)?shù)組新的長(zhǎng)度

          2.4 shift()

          方法刪除數(shù)組的第一個(gè)元素并將其返回,然后把所有隨后的元素下移一個(gè)位置來(lái)填補(bǔ)數(shù)組頭部的空缺,返回值是刪除的元素

          let arr = [1,2,3];
          
          let item = arr.shift(); // 返回刪除的值1
          
          console.log(arr, item)
          
          // [2, 3] 1
          

          返回值: 從數(shù)組中刪除的元素; 如果數(shù)組為空則返回undefined

          2.5 splice()

          方法是在數(shù)組中插入或刪除元素的通用方法

          // start不超過(guò)數(shù)組長(zhǎng)度(以下操作是連續(xù)的)
          let arr = [1,2,3,4,5];
          
          arr.splice(2) // arr是[1,2],返回值是[3,4,5]
          
          arr.splice(1,1) // arr是[1],返回值是[2]
          
          arr.splice(0,3) // arr是[],返回值是[1],因?yàn)榇藭r(shí)數(shù)組從第0位開(kāi)始不夠3位,所以是刪除從0開(kāi)始到最后的所有元素。
          
          // start大于數(shù)組長(zhǎng)度(以下操作是連續(xù)的)
          
          let arr = [1,2,3,4,5];
          
          arr.splice(5) // arr是[1,2,3,4,5],返回值是[]
          
          arr.splice(5,3,6) // arr是[1,2,3,4,5,6],返回值是[]
          
          
          arr.splice(5,3,7) // arr是[1,2,3,4,5,7] 返回值是[6]
          
          
          // start是負(fù)數(shù)(以下操作是連續(xù)的)
          
          let arr = [1,2,3,4,5];
          
          arr.splice(-3,2); // arr是[1,2,5], 返回值是[3,4]
          arr.splice(-4); // arr是[],返回值是[1,2,5]
          
          // 插入數(shù)組時(shí),是插入數(shù)組本身,而不是數(shù)組元素
          
          let arr = [1,4,5];
          
          arr.splice(1,0,[2,3]) // arr是[1,[2,3],4,5],返回值是[]
          

          2.6 sort()

          sort() 方法將數(shù)組中的元素排序并返回排序后的數(shù)組

          var stringArray = ["Blue", "Humpback", "Beluga"];
          var numberArray = [40, 1, 5, 200];
          
          function compareNumbers(a, b){
              return a - b;
          }
          
          
          console.log('stringArray:' + stringArray.join());
          
          console.log('Sorted:' + stringArray.sort());
          
          console.log('numberArray:' + numberArray.join());
          
          // 沒(méi)有使用比較函數(shù)時(shí),數(shù)字并不會(huì)按照我們?cè)O(shè)想的那樣排序
          
          console.log('Sorted without a compare function:'+ numberArray.sort());
          
          console.log('Sorted with compareNumbers:'+ numberArray.sort(compareNumbers));
          
          
          //打印如下
          // stringArray: Blue,Humpback,Beluga
          // Sorted: Beluga,Blue,Humpback
          // numberArray: 40,1,5,200
          // Sorted without a compare function: 1,200,40,5
          // Sorted with compareNumbers: 1,5,40,200
          

          返回值: 返回排序后的數(shù)組。原數(shù)組已經(jīng)被排序后的數(shù)組代替

          2.7 reverse()

          方法將數(shù)組中的元素顛倒順序,返回逆序的數(shù)組

          let arr = [1,2,3];
          
          arr.reverse() // arr是[3,2,1],返回值是[3,2,1]
          

          返回值: 返回順序顛倒后的數(shù)組。原數(shù)組已經(jīng)被排序后的數(shù)組代替

          2.8 fill()

          方法用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素

          arr.fill(value[, start[, end]])
          
          • value 用來(lái)填充數(shù)組元素的值。
          • start (可選) 起始索引,默認(rèn)值為0。
          • end (可選) 終止索引,默認(rèn)值為 this.length。
          • 如果 start 是個(gè)負(fù)數(shù), 則開(kāi)始索引會(huì)被自動(dòng)計(jì)算成為 length+start, 其中 length 是 this 對(duì)象的 length屬性值. 如果 end 是個(gè)負(fù)數(shù), 則結(jié)束索引會(huì)被自動(dòng)計(jì)算成為 length+end

          返回值: 修改后的數(shù)組

          [1, 2, 3].fill(4); // [4, 4, 4]
          
          [1, 2, 3].fill(4, 1); // [1, 4, 4]
          
          [1, 2, 3].fill(4, 1, 2); // [1, 4, 3]
          
          [1, 2, 3].fill(4, 1, 1); // [1, 2, 3]
          
          [1, 2, 3].fill(4, 3, 3); // [1, 2, 3]
          
          [1, 2, 3].fill(4, -3, -2); // [4, 2, 3]
          
          [1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3]
          
          [1, 2, 3].fill(4, 3, 5); // [1, 2, 3]
          
          Array(3).fill(4); // [4, 4, 4]
          
          //fill 方法故意被設(shè)計(jì)成通用方法, 該方法不要求 this 是數(shù)組對(duì)象。
          
          [].fill.call({ length: 3 }, 4); // {0: 4, 1: 4, 2: 4, length: 3}
          

          三、不改變?cè)瓟?shù)組的方法

          3.1 slice()

          方法返回一個(gè)從開(kāi)始到結(jié)束(不包括結(jié)束)選擇的數(shù)組的一部分淺拷貝到一個(gè)新數(shù)組對(duì)象。且原始數(shù)組不會(huì)被修改

          • 返回值: 一個(gè)含有提取元素的新數(shù)組
          let arr = [1,2,3,4,5];
          
          let arr1 = arr.slice(1,3); // arr是[1,2,3,4,5], arr1是[2,3]
          
          let arr2 = arr.slice(-2,-1); // arr是[1,2,3,4,5], arr2是[4]
          
          // 開(kāi)始位置在結(jié)束位置后面,得到的數(shù)組是空
          
          let arr3 = arr.slice(-2, -3); // arr是[1,2,3,4,5], arr3是[]
          
          let arr4 = arr.slice(2, 1); // arr是[1,2,3,4,5], arr4是[]
          
          
          //如果元素是個(gè)對(duì)象引用 (不是實(shí)際的對(duì)象),slice 會(huì)拷貝這個(gè)對(duì)象引用到新的數(shù)組里。兩個(gè)對(duì)象引用都引用了同一個(gè)對(duì)象。如果被引用的對(duì)象發(fā)生改變,則新的和原來(lái)的數(shù)組中的這個(gè)元素也會(huì)發(fā)生改變。
          
          
          let arr = [{name: 'xiaoming'}];
          
          let arr1 = arr.slice(); // arr是[{name: xiaoming}],arr1是[{name: 'xiaoming'}]
          
          arr1[0].name = 'xiaogang'; // arr是[{name: 'xiaogang'}],arr1是[{name: 'xiaogang'}]
          
          
          // 對(duì)于字符串、數(shù)字及布爾值來(lái)說(shuō)(不是 String、Number 或者 Boolean 對(duì)象),slice 會(huì)拷貝這些值到新的數(shù)組里。在別的數(shù)組里修改這些字符串或數(shù)字或是布爾值,將不會(huì)影響另一個(gè)數(shù)組。
          
          let arr = [1,2,3];
          
          let arr1 = arr.slice(); // arr是[1,2,3],arr1是[1,2,3]
          
          arr1[1] = "two"; // arr是[1,2,3],arr1是[1,"tow",3]
          
          // 當(dāng)然,如果向兩個(gè)數(shù)組任一中添加了新元素(簡(jiǎn)單或者引用類型),則另一個(gè)不會(huì)受到影響
          

          3.2 join()

          方法將數(shù)組(或一個(gè)類數(shù)組對(duì)象)中所有元素都轉(zhuǎn)化為字符串并連接在一起,返回最后生成的字符串

          • 返回值: 一個(gè)所有數(shù)組元素連接的字符串。如果 arr.length 為0,則返回空字符串
          let num = [1,2,3];
          
          let str1 = num.join(); // 1,2,3
          
          let str2 = num.join(', ') // 1, 2, 3
          
          let str3 = num.join('') // 123
          
          //所有的數(shù)組元素被轉(zhuǎn)換成字符串,再用一個(gè)分隔符將這些字符串連接起來(lái)。如果元素是undefined 或者null, 則會(huì)轉(zhuǎn)化成空字符串。
          
          let num = [1,null,3];
          let str1 = num.join(); // 1,,3
          
          //如果數(shù)組中的元素是數(shù)組,會(huì)將里面的數(shù)組也調(diào)用join()
          let num = [[1,2],3];
          
          let str1 = num.join('-'); // 1,2-3
          
          // 如果數(shù)組中的元素是對(duì)象,對(duì)象會(huì)被轉(zhuǎn)為[object Object]字符串
          
          let num = [{num: 1},2,3];
          
          let str1 = num.join('-'); // [object Object]-2-3
          
          // 扁平化簡(jiǎn)單的二維數(shù)組
          const arr = [11, [22, 33], [44, 55], 66];
          const flatArr = arr.join().split(','); // ["11", "22", "33", "44", "55", "66"]
          

          3.3 toString()

          方法將數(shù)組的每個(gè)元素轉(zhuǎn)化為字符串(如有必要將調(diào)用元素的toString()方法)并且輸出用逗號(hào)分割的字符串列表。返回一個(gè)字符串表示數(shù)組中的元素

          [1,2,3].toString(); // 1,2,3
          
          [1,[2,'c']].toString(); //1,2,c
          
          // 以上與不使用任何參數(shù)調(diào)用join()方法返回的字符串是一樣的。
          
          // 以下的這個(gè)例子要跟下面的toLocaleString對(duì)照看
          
          [{a:1},1,new Date()].toString() //"[object Object],1,Sat Jul 07 2018 18:43:45 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)"
          

          注意: 當(dāng)數(shù)組和字符串操作的時(shí)候,js 會(huì)調(diào)用這個(gè)方法將數(shù)組自動(dòng)轉(zhuǎn)換成字符串

          [1,2,3]+'abc' //1,2,3abc
          

          返回值: 返回一個(gè)字符串表示數(shù)組中的元素

          // 扁平化簡(jiǎn)單的二維數(shù)組
          const arr = [11, [22, 33], [44, 55], 66];
          
          const flatArr = arr.toString().split(','); // ["11", "22", "33", "44", "55", "66"]
          

          3.4 toLocaleString()

          數(shù)組中的元素將使用各自的 toLocaleString 方法轉(zhuǎn)成字符串,這些字符串將使用一個(gè)特定語(yǔ)言環(huán)境的字符串(例如一個(gè)逗號(hào) ",")隔開(kāi)

          //數(shù)組中的元素將會(huì)使用各自的 toLocaleString 方法:
          
          // Object: Object.prototype.toLocaleString()
          
          // Number: Number.prototype.toLocaleString()
          
          // Date: Date.prototype.toLocaleString()
          
          let prices = ['¥7', 500, 8123, 12];
          
          // 不帶參數(shù)
          
          prices.toLocaleString(); // "¥7,500,8,123,12"
          
          //帶參數(shù)
          
          prices.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }); // "¥7,500,8,123,12"
          
          //MDN上的舉例中說(shuō)是 "¥7,¥500,¥8,123,¥12",在瀏覽器和Node中驗(yàn)證了返回的都是 "¥7,500,8,123,12" 啊!
          
          // 以下的這個(gè)例子要跟上面的toString對(duì)照看
          
          [{a:1},1,new Date()].toLocaleString() //"[object Object],1,2018/7/7 下午6:45:00"
          

          返回值: 表示數(shù)組元素的字符串

          3.5 concat()

          它的元素包括調(diào)用concat()的原始數(shù)組的元素和concat()的每個(gè)參數(shù),但是要注意,concat()不會(huì)遞歸扁平化數(shù)組的數(shù)組,concat()也不會(huì)修改調(diào)用的數(shù)組

          [1,2,3].concat([4,5,6],[7,8,9]) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
          
          ['a','b','c'].concat(1,[2,3],[[4,5]]) // ["a", "b", "c", 1, 2, 3, [4,5]]
          
          
          // concat方法不會(huì)改變this或任何作為參數(shù)提供的數(shù)組,而是返回一個(gè)淺拷貝,所以原始數(shù)組和新數(shù)組都引用相同的對(duì)象。 如果引用的對(duì)象被修改,新數(shù)組和原始數(shù)組都會(huì)變。
          
          
          let obj = {a: 1};
          
          let arr1 = [2,obj];
          
          let arr2 = [1].concat(arr1);
          
          console.log(arr1,arr2) //[2,{a:1}],[1,2,{a:1}]
          
          //記錄下上面的打印結(jié)果之后修改obj
          
          obj.a = 2;
          console.log(arr1,arr2) ////[2,{a:2}],[1,2,{a:2}]
          
          
          // 說(shuō)了是淺拷貝,而且原數(shù)組也不改變,那我們就可以用它來(lái)實(shí)現(xiàn)數(shù)組的淺拷貝功能
          
          let num1 = [1,2,3];
          
          
          //第一種
          
          let num2 = num1.concat();
          
          //第二種
          
          let num2 = [].concat(num1);
          num2[0] = 'a';
          
          console.log(num1,num2); // [1, 2, 3] ["a", 2, 3]
          

          3.6 isArray()

          用于確定傳遞的值是否是一個(gè) Array

          // 下面的函數(shù)調(diào)用都返回 true
          
          Array.isArray([]);
          
          Array.isArray([1]);
          
          Array.isArray(new Array());
          
          // 這里注意:Array.prototype 也是一個(gè)數(shù)組,一個(gè)屬性值不是索引的數(shù)組。[constructor: ?, concat: ?, find: ?, findIndex: ?, pop: ?, …]
          
          Array.isArray(Array.prototype);
          
          // 下面的函數(shù)調(diào)用都返回 false
          
          
          Array.isArray();
          
          Array.isArray({});
          
          Array.isArray(null);
          
          Array.isArray(undefined);
          
          Array.isArray(17);
          
          Array.isArray('Array');
          
          Array.isArray(true);
          
          Array.isArray(false);
          
          Array.isArray({ __proto__: Array.prototype });
          

          四、數(shù)組遍歷、映射、過(guò)濾、檢測(cè)、簡(jiǎn)化等方法

          4.1 forEach()

          方法從頭到尾遍歷數(shù)組,為每個(gè)元素調(diào)用指定的函數(shù)

          • callback 為數(shù)組中每個(gè)元素執(zhí)行的函數(shù),該函數(shù)接收三個(gè)參數(shù)
          // 1、 空元素不遍歷,undefined和null是會(huì)遍歷的。
          
          let numberArr = [1,2,,3];
          
          numberArr.forEach(function (value,index,array) {
              console.log(value,index,array)
          })
          
          
          
          //打印信息如下,可見(jiàn)空元素是不會(huì)遍歷的
          //1 0 [1, 2, empty, 3]
          //2 1 [1, 2, empty, 3]
          //3 3 [1, 2, empty, 3]
          
          let nullArr = [1,2,null,3];
          
          nullArr.forEach(function (value,index,array) {
              console.log(value,index,array)
          })
          
          
          //打印信息如下,null是會(huì)遍歷的
          //1 0 (4) [1, 2, null, 3]
          //2 1 (4) [1, 2, null, 3]
          //null 2 (4) [1, 2, null, 3]
          //3 3 (4) [1, 2, null, 3]
          //2、已刪除的項(xiàng)不會(huì)被遍歷到。如果已訪問(wèn)的元素在迭代時(shí)被刪除了,之后的元素將被跳過(guò)
          
          
          let numberArr = [1,2,3];
          numberArr.forEach(function (value,index,array) {
              if(index === 0) {
          
              delete numberArr[2]; //刪除第三項(xiàng)
              //或者numberArr.pop()
          }
          
          console.log(value,index,array)
          })
          
          
          
          //打印信息如下:
          // 1 0 (3) [1, 2, empty]
          // 2 1 (3) [1, 2, empty]
          let numberArr1 = [1,2,3,4];
          numberArr1.forEach(function (value,index,array) {
          
          if(index === 1) {
              numberArr1.shift() //遍歷到第二項(xiàng)的時(shí)候,刪除第一項(xiàng)
          }
          
          console.log(value,index,array)
          })
          
          
          
          // 打印信息如下,遍歷到第二項(xiàng)的時(shí)候,刪除第一項(xiàng),會(huì)跳過(guò)第三項(xiàng)
          // 1 0 (4) [1, 2, 3, 4]
          // 2 1 (3) [2, 3, 4]
          // 4 2 (3) [2, 3, 4]
          // 3、forEach 遍歷的范圍在第一次調(diào)用 callback 前就會(huì)確定。調(diào)用forEach 后添加到數(shù)組中的項(xiàng)不會(huì)被 callback 訪問(wèn)到。如果已經(jīng)存在的值被改變,則傳遞給 callback 的值是 forEach 遍歷到他們那一刻的值。
          
          
          let arr = [1,2,3];
          arr.forEach(function (value,index,array) {
          
              if(index === 0) {
                  arr.push('新增的不會(huì)被遍歷到')
                  arr[2] = 4;
          }
          
          console.log(value,index,array)
          })
          
          
          
          // 1 0 (4) [1, 2, 4, "新增的不會(huì)被遍歷到"]
          // 2 1 (4) [1, 2, 4, "新增的不會(huì)被遍歷到"]
          // 4 2 (4) [1, 2, 4, "新增的不會(huì)被遍歷到"]
          // 4、使用thisArg參數(shù) 和 箭頭函數(shù)使用thisArg
          
          let arr = [1,2,3];
          let obj = {arr: 'thisArg'}
          
          arr.forEach(function () {
              console.log(this.arr)
          },obj)
          
          
          // 打印三次 'thisArg'
          let arr = [1,2,3];
          let obj = {arr: 'thisArg'}
          arr.forEach(() => {
              console.log(this.arr)
          },obj)
          
          // 打印三次 undefined
          
          // 5、forEach無(wú)法中途退出循環(huán),只能用return退出本次回調(diào),進(jìn)行下一次回調(diào)
          
          let arr = [1,2,3];
          
          let result = arr.forEach((value) => {
              if(value == 2) {
                  return value;
              }
              console.log(value)
          
          })
          
          
          console.log(result) // undefined ,即使中間return vlaue,也還是undefined
          
          
          //打印value的值如下,說(shuō)明return 并不能終止循環(huán)
          // 1
          // 3
          

          4.2 map()

          方法創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素都調(diào)用一個(gè)callback函數(shù)后返回的結(jié)果

          • 返回值: 一個(gè)新數(shù)組,每個(gè)元素都是回調(diào)函數(shù)的結(jié)果
          • 不要用 map 代替 forEach,map 會(huì)創(chuàng)建一個(gè)新的數(shù)組,占用內(nèi)存。如果你不用 map 的返回值,那你就應(yīng)當(dāng)使用 forEach

          4.3 filter()

          • 方法返回的數(shù)組元素是調(diào)用的數(shù)組的一個(gè)子集。傳入的函數(shù)時(shí)用來(lái)邏輯判定的,該函數(shù)返回 true 或 false,如果返回值為true或能轉(zhuǎn)化為true的值,那么傳遞給判斷函數(shù)的元素就是這個(gè)子集的成員,它將被添加倒一個(gè)作為返回值的數(shù)組中
          • 返回值: 一個(gè)新的通過(guò)測(cè)試的元素的集合的數(shù)組,如果沒(méi)有通過(guò)測(cè)試則返回空數(shù)組

          4.4 every()

          方法測(cè)試數(shù)組的所有元素是否都通過(guò)了指定函數(shù)的測(cè)試。當(dāng)且僅當(dāng)針對(duì)數(shù)組中的所有元素調(diào)用判定函數(shù)都返回true,它才返回true。

          • 空數(shù)組上調(diào)用every方法,返回 true,因?yàn)榭諗?shù)組沒(méi)有元素,所以空數(shù)組中所有元素都符合給定的條件
          • 返回值: 一個(gè)布爾值,當(dāng)所有的元素都符合條件才返回true,否則返回false
          let arr = [12,34,5,23,44];
          let num = 0;
          let result = arr.every(function (element, index, array) {
          
              num++;
              return element > 10;
          })
          
          console.log(result,num) // 打印 false 3
          
          // 可見(jiàn)發(fā)現(xiàn)5這個(gè)小于10的元素后,遍歷立即終止,num為3
          
          let arr = [12,34,,23,44];
          let num = 0;
          let result = arr.every(function (element, index, array) {
          
          num++;
          
          return element > 10;
          })
          
          console.log(result,num) // 打印 true 4
          
          // 不會(huì)遍歷沒(méi)有賦值的索引位置,所以num為4
          
          let result = [].every(function (element, index, array) {
          
          return element > 10;
          })
          
          console.log(result) // 打印 true
          

          4.5 some()

          方法測(cè)試數(shù)組中的某些元素是否通過(guò)由提供的函數(shù)實(shí)現(xiàn)的測(cè)試。當(dāng)數(shù)組中至少有一個(gè)元素調(diào)用判定函數(shù)返回true,它就返回true,當(dāng)且僅當(dāng)數(shù)組中的所有元素調(diào)用判定函數(shù)都返回false,它才返回false

          • 空數(shù)組調(diào)用some,返回false
          • 返回值: 只要數(shù)組中的任意一個(gè)元素在回調(diào)函數(shù)中返回的是真值,就返回true,否則為false
          // 一個(gè)簡(jiǎn)單的例子說(shuō)明
          function isBiggerThan10(element, index, array) {
              console.log(index)
              return element > 10;
          }
          
          
          [2, 5, 8, 1, 4].some(isBiggerThan10); // 返回值是false,打印的index是0,1,2,3,4
          
          [12, 5, 8, 1, 4].some(isBiggerThan10); // 返回值是true,打印的index是0,找到符合元素之后立即返回
          
          
          // 實(shí)現(xiàn)一個(gè)跟includes方法類似的功能
          let arr = [1,2,3];
          
          function include(value) {
          
          return arr.some((element) => {
              return element === value
          })
          }
          
          
          
          include(2) // true
          include(4) // false
          
          let result = [].some(function (element, index, array) {
          
          return element > 10;
          
          })
          
          console.log(result) // 打印 false
          

          4.6 reduce() 和 reduceRight()

          這兩個(gè)方法使用指定的函數(shù)將數(shù)組元素進(jìn)行組合,生成單個(gè)值。這在函數(shù)式編程中是常見(jiàn)的操作,也可以稱為“注入”和“折疊”。reduceRight() 和 reduce() 工作原理是一樣的,不同的是reduceRight() 按照數(shù)組索引從高到低(從右到左)處理數(shù)組,而不是從低到高

          • 如果數(shù)組為空且沒(méi)有提供initialValue,會(huì)拋出TypeError 。如果數(shù)組僅有一個(gè)元素(無(wú)論位置如何)并且沒(méi)有提供initialValue, 或者有提供initialValue但是數(shù)組為空,那么此唯一值將被返回并且callback不會(huì)被執(zhí)行
          • 返回值: 函數(shù)累計(jì)處理的結(jié)果
          let arr = [1,2,3,4,5];
          
          let sum = arr.reduce((x,y) => x + y,0);
          
          console.log(sum) // 15
          
          // 看一下initialValue傳和不傳的區(qū)別
          
          let arr = [1,2,3,4,5];
          
          arr.reduce(function (accumulator,currentValue,currentIndex,arr) {
          
              console.log(currentIndex)
              
              return accumulator + currentValue;
          })
          
          
          
          // 1,2,3,4,5 沒(méi)傳入initialValue,索引是從1開(kāi)始
          
          arr.reduce(function (accumulator,currentValue,currentIndex,arr) {
          
              console.log(currentIndex)
              
              return accumulator + currentValue;
          },10)
          
          
          
          // 0,1,2,3,4,5 傳入initialValue,索引從0開(kāi)始
          // 應(yīng)用到二維數(shù)組展開(kāi)
          let arr = [[0, 1], [2, 3], [4, 5]].reduce(
              (a, b) => a.concat(b)
          );
          
          console.log(arr)
          // [0, 1, 2, 3, 4, 5]
          

          4.7 indexof()

          方法返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在,則返回-1

          • 注意: indexOf 使用嚴(yán)格相等(即 ===)比較 searchElement 和數(shù)組中的元素。而且indexOf()不能識(shí)別 NaN
          • 返回值: 首個(gè)被找到的元素在數(shù)組中的索引位置; 若沒(méi)有找到則返回 -1
          let array = [2, 5, 9];
          array.indexOf(2) // 0
          
          array.indexOf(7) // -1
          array.indexOf(9, 2) // 2
          
          array.indexOf(9, 3) // -1
          
          array.indexOf(2, -1) // -1
          
          array.indexOf(2, -3) // 0
          
          array.indexOf(2, -4) // 0
          
          let array1 = [1,2,NaN];
          
          array1.indexOf(NaN) // -1
          

          4.8 includes()

          方法用來(lái)判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,根據(jù)情況,如果包含則返回 true,否則返回false。 ES7新增

          • 返回值: 一個(gè)布爾值,根據(jù)情況,如果包含則返回 true,否則返回false
          [1, 2, 3].includes(2); // true
          [1, 2, 3].includes(4); // false
          [1, 2, 3].includes(3, 3); // false
          [1, 2, 3].includes(3, -1); // true
          [1, 2, 3].includes(3, -4); // true
          [1, 2, NaN].includes(NaN); // true
          

          4.9 find() 和 findIndex()

          find 方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的值。否則返回 undefined。findIndex 方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的索引。否則返回-1

          • find 方法,當(dāng)某個(gè)元素通過(guò) callback 的測(cè)試時(shí),返回?cái)?shù)組中的一個(gè)值,否則返回 undefined。
          • findIndex方法,返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的索引。否則返回-1
          // find
          let a = [1, 4, -5, 10].find((n) => n < 0); // 返回元素-5
          
          let b = [1, 4, -5, 10,NaN].find((n) => Object.is(NaN, n)); // 返回元素NaN
          
          // findIndex
          let a = [1, 4, -5, 10].findIndex((n) => n < 0); // 返回索引2
          let b = [1, 4, -5, 10,NaN].findIndex((n) => isNaN(n)); // 返回索引4
          
          // 稀疏數(shù)組
          let a =[1,,3,4];
          
          let index = 0;
          a.find((n) => {
              
              console.log(index++) //0,1,2 第二次是empty也會(huì)調(diào)用一次,而且返回為true,立即退出
              
              return n === 3;
          })
          

          4.10 其他

          • keys()方法返回一個(gè)新的Array迭代器,它包含數(shù)組中每個(gè)索引的鍵
          • values() 方法返回一個(gè)新的Array迭代器,它包含數(shù)組中每個(gè)索引的值
          • entries()方法返回一個(gè)新的Array迭代器,該對(duì)象包含數(shù)組中每個(gè)索引的鍵/值對(duì)


          源:升學(xué)就業(yè)幫講師——肖云銳

          1. 數(shù)組的聲明和賦值

          方式一: new Array()構(gòu)造函數(shù)方法

          // 1. 使用構(gòu)造函數(shù)創(chuàng)建數(shù)組對(duì)象
          // 創(chuàng)建了一個(gè)空數(shù)組var arr = new Array();
          // 創(chuàng)建了一個(gè)數(shù)組,里面存放了3個(gè)字符串
          var arr = new Array('zs', 'ls', 'ww');
          // 創(chuàng)建了一個(gè)數(shù)組,里面存放了4個(gè)數(shù)字
          var arr = new Array(1, 2, 3, 4);

          方式二: 字面量方式

          // 2. 使用字面量創(chuàng)建數(shù)組對(duì)象
          var arr = [1, 2, 3];
          // 獲取數(shù)組中元素的個(gè)數(shù)
          console.log(arr.length);

          注意事項(xiàng):

          1. 定義空數(shù)組的方式

          var arr1 = [];

          2. 定義一個(gè)數(shù)組可以存入不同的數(shù)據(jù)類型. 但是一般不建議這樣使用.

          var arr3 = [25,true,'abc'];

          3. 訪問(wèn)數(shù)組的元素通過(guò)索引,索引從開(kāi)始

          var arr6 = [];
          arr[0] = 10;
          arr[1] = 20;
          arr[2] = 30;
          console.log(arr6);

          4. js中數(shù)組的下標(biāo)是可以不連續(xù)的,如果不連續(xù)默認(rèn)補(bǔ)充empty

          var arr6 = [];
          arr6[0] = 10;
          arr6[1] = 20;
          arr6[2] = 30;
          console.log(arr6);
          arr6[4] = 50;
          console.log(arr6)

          執(zhí)行結(jié)果如下圖所示:

          5. 數(shù)組的擴(kuò)容和縮容

          var arr = [1, 1.2, new Date(), false, "呵呵"];
          console.log("前:" + arr);
          // 數(shù)組的擴(kuò)容arr.length = 10;
          // 數(shù)組的縮小
          //arr.length = 3;
          console.log("后:" + arr);

          6. 清空數(shù)組

          // 方式1 推薦
          arr = [];
          // 方式2
          arr.length = 0;
          // 方式3
          arr.splice(0, arr.length);

          2. 數(shù)組的遍歷

          方式一:for循環(huán),也是最常見(jiàn)的

          for (let i = 0; i < arr.length; i++) {
          console.log(arr[i])
          }

          方式二:for......in 遍歷數(shù)組

          for(let item in arr){
          console.log(arr[item])
          }

          方式三: foreach遍歷數(shù)組


          arr.forEach(function(item, index){ 
             console.log(item + "=" + index);
          });

          3. 數(shù)組的常用方法

          數(shù)組常用的一些方法:

          首尾數(shù)據(jù)操作

          push() //在數(shù)組末尾添加一個(gè)或多個(gè)元素,并返回?cái)?shù)組操作后的長(zhǎng)度
          pop() //刪除數(shù)組最后一項(xiàng),返回刪除項(xiàng)
          shift() //刪除數(shù)組第一項(xiàng),返回刪除項(xiàng)
          unshift() //在數(shù)組開(kāi)頭添加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長(zhǎng)度

          合并和拆分

          concat()
          // 將兩個(gè)數(shù)組合并成一個(gè)新的數(shù)組,原數(shù)組不受影響。
          // 參數(shù)位置可以是一個(gè)數(shù)組字面量、數(shù)組變量、零散的值。
          slice(start,end)
          // 從當(dāng)前數(shù)組中截取一個(gè)新的數(shù)組,不影響原來(lái)的數(shù)組,返回一個(gè)新的數(shù)組,
          // 包含從 start 到 end (不包括該元素)的元素。
          // 參數(shù)區(qū)分正負(fù),正值表示下標(biāo)位置,負(fù)值表示從后面往前數(shù)第幾個(gè)位置,
          // 參數(shù)可以只傳遞一個(gè),表示從開(kāi)始位置截取到字符串結(jié)尾。

          刪除、插入、替換

          splice(index,howmany,element1,element2,……)
          //用于插入、刪除或替換數(shù)組的元素
          //index:刪除元素的開(kāi)始位置
          //howmany:刪除元素的個(gè)數(shù),可以是0
          //element1,element2:要替換的新的數(shù)據(jù)。

          位置方法

          indexOf() //查找數(shù)據(jù)在數(shù)組中最先出現(xiàn)的下標(biāo)
          lastIndexOf() //查找數(shù)據(jù)在數(shù)組中最后一次出現(xiàn)的下標(biāo)
          //如果沒(méi)找到返回-1

          排序和倒序

          reverse() //將數(shù)組完全顛倒,第一項(xiàng)變成最后一項(xiàng),最后一項(xiàng)變成第一項(xiàng)。
          sort(); //默認(rèn)根據(jù)字符編碼順序,從小到大排序
          //如果想要根據(jù)數(shù)值大小進(jìn)行排序,必須添加sort的比較函數(shù)參數(shù)。
          //該函數(shù)要比較兩個(gè)值,然后返回一個(gè)用于說(shuō)明這兩個(gè)值的相對(duì)順序的數(shù)字。比較函數(shù)應(yīng)該具有兩個(gè)參數(shù) a 和 b,根據(jù)a和b的關(guān)系作為判斷條件,返回值根據(jù)條件分為三個(gè)分支,正數(shù)、負(fù)數(shù)、0:
          //返回值是負(fù)數(shù)-1:a排在b前面。
          //返回值是整數(shù)1:a排在b后面。
          //返回值是0:a和b的順序保持不變。
          //人為能控制的是判斷條件。

          轉(zhuǎn)字符串方法

          // 將數(shù)組的所有元素連接到一個(gè)字符串中。
          join() //通過(guò)參數(shù)作為連字符將數(shù)組中的每一項(xiàng)用連字符連成一個(gè)完整的字符串

          迭代方法

          //不會(huì)修改原數(shù)組(可選) HTML5新增
          every()、filter()、forEach()、map()、some()

          代碼示例


          主站蜘蛛池模板: 91在线精品亚洲一区二区| 国产精品99精品一区二区三区| 老湿机一区午夜精品免费福利| 国产91大片精品一区在线观看| 国产一区中文字幕在线观看| 一区国严二区亚洲三区| 影院成人区精品一区二区婷婷丽春院影视| 亲子乱av一区二区三区| 国语对白一区二区三区| 国产精品综合AV一区二区国产馆| 亚洲AV无一区二区三区久久| 亚洲一区二区三区乱码A| 色欲AV无码一区二区三区| 日韩免费视频一区| 精品国产福利在线观看一区| 在线观看精品一区| 久热国产精品视频一区二区三区 | 一区国产传媒国产精品| 国产精品毛片一区二区三区| 国产在线视频一区二区三区98| 久久婷婷色综合一区二区| 午夜福利国产一区二区| 国产在线观看一区二区三区| 风间由美在线亚洲一区| 国产成人一区二区精品非洲| 国产a久久精品一区二区三区| 国产成人无码aa精品一区| 天天看高清无码一区二区三区| 国产成人av一区二区三区在线观看 | 性色AV 一区二区三区| 丝袜美腿高跟呻吟高潮一区| 亚洲国产精品一区二区第四页| 国产美女av在线一区| 精品一区二区无码AV| 午夜福利av无码一区二区 | 538国产精品一区二区在线| 在线精品国产一区二区三区| 亚洲国产一区国产亚洲 | 变态调教一区二区三区| 国产日韩精品一区二区三区在线| 亚洲一区二区在线视频|