日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS基础之数组--概述、创建数组的几种方式、数组的特点、数组的常用方法、数组的解构赋值、数组高级API

發布時間:2024/1/8 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS基础之数组--概述、创建数组的几种方式、数组的特点、数组的常用方法、数组的解构赋值、数组高级API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

  • 描述:數組(array)是按照一定順序排列的一組值,每個值都擁有自己的編號,編號從0開始。整個數組用方括號來表示。
  • 語法:var arr=[item1,item2,item3…]
1.1 注意
- 數組是按照一定順序排列的一組值,順序體現在下標,下標是從0開始- 和其他編程語言不同,如果數組對應的索引中沒有存儲數據,默認存儲的就是undefined- javascript中訪問了數組中不存在的索引不會報錯,會返回undefined- 當javascript中數組的存儲空間不夠時數組會自動擴容- 數組在分配存儲空間的時候不一定是連續的;在瀏覽器中各大瀏覽器也對數組分配存儲空間進行了優化,如果是相同類型數據則盡量分配連續的存儲空間,反之不會 - 數組元素:數組中的每一個值稱為數組元素,數組元素可以是**任意類型** <script>var str = 'hello world! goodbye world!';var result = str.split('o');console.log(result); // ["hell", " w", "rld! g", "", "dbye w", "rld!"] </script>

二、創建數組的幾種方式

<script>//1var array = [];array[0] = "我";array[1] = "愛";array[2] = "生";array[3] = "活";alert(array);//2var array = ["我", "愛", "祖", "國"]; //定義數組并初始化console.log(array[0]); //通過索引值獲取數組的長度console.log(array[2]);console.log(array[3]);alert(array);//通過索引給元素賦值array[2] = "文";array[3] = "學";alert(array);//3var array1 = new Array(); //定義了一個空數組var array2 = new Array(5);var array3 = new Array("關曉彤", "趙麗穎", "張子楓");</script>

三、數組的特點和遍歷

3.1 數組的本質
  • 描述:本質上,數組是對象類型的一種特殊表現形式。
3.2 如何往數組中存儲數據?


變量名稱[索引號] = 需要存儲的數據;

let arr = [];arr[0] = "張三"
3.3 如何從數組中獲取存儲的數據?

變量名稱[索引號]

let arr = [1,2,3];console.log(arr[1]);
3.4 注意點
  • 和其它編程語言不同, 如果數組對應的索引中沒有存儲數據, 默認存儲的就是undefined
let arr = new Array(3);console.log(arr[0]);console.log(arr[1]);console.log(arr[2]);

  • JavaScript中訪問了數組中不存在的索引不會報錯, 會返回undefined
let arr = new Array(3); // 0 1 2console.log(arr[666]);

  • 當JavaScript中數組的存儲空間不夠時數組會自動擴容
let arr = new Array(3);arr[0] = "lnj";arr[1] = "zs";arr[2] = "ls";arr[3] = "666";console.log(arr);

  • JavaScript的數組可以存儲不同類型數據
let arr = new Array(4);arr[0] = 123;arr[1] = "123";arr[2] = true;arr[3] = null;console.log(arr);

  • JavaScript中數組分配的存儲空間不一定是連續的
  • JavaScript數組是采用"哈希映射"方式分配存儲空間
  • 什么是哈希映射? 好比字典可以通過偏旁部首找到對應漢字, 我們可以通過索引找到對應空間
  • 在瀏覽器中各大瀏覽器也對數組分配存儲空間進行了優化
  • 如果存儲的都是相同類型的數據, 那么會盡量分配連續的存儲空間
  • 如果存儲的不是相同的數據類型, 那么就不會分配連續的存儲空間
3.5 數組的長度
  • 描述:數組的長度實際是數組中元素的個數
  • 語法:arr.length
  • 因為數組中可以存儲任意類型的元素,因此數組在內存中的存儲位置是不連續的,但是數組的下標是連續的
<script>var arr = [['張三', 22, true],['李四', 33, false],['peter', 44, true]];console.log(arr.length); // 3var ageArr = [10, 20, 30];//ageArr.length = -1;console.log(ageArr.length); // 3console.log(ageArr[4]); // undefined </script>

  • length是一個可寫屬性
  • 如果設置length的長度小于數組本身,那么多余元素舍去
  • 如果設置length的長度大于數組本身,那么缺少的元素空位補齊
  • 如果設置length的長度是不合法的值,那么會報 Invalid array length 錯誤
<script>var ageArr = [10, 20, 30];ageArr.length = 2;//ageArr.length=-2;// Invalid array lengthconsole.log(ageArr.length); // 2console.log(ageArr[4]); // undefined</script>

3.6 數組的遍歷

數組的遍歷就是依次取出數組中存儲的所有數據

  • 描述:如果想要連續訪問數組中的每個元素,可以使用for in快速遍歷或者for循環遍歷依次取出數組中所有的元素。
<script>var heroArr = ['GreenJuPeople', 'BlackGuaFu', 'MetalXia'];for (var index in heroArr) {console.log(heroArr[index]); //GreenJuPeople BlackGuaFu MetalXia}//或var heroArr = ['GreenJuPeople', 'BlackGuaFu', 'MetalXia'];for (var index = 0; index < heroArr.length; index++) {console.log(heroArr[index]); //GreenJuPeople BlackGuaFu MetalXia}</script>
3.7 數組的解構賦值

解構賦值是ES6中新增的一種賦值方式

  • 數組解構賦值的注意點
let arr = [1, 3, 5];// let a = arr[0];// let b = arr[1];// let c = arr[2];let [a, b, c] = arr;console.log("a = " + a);console.log("b = " + b);console.log("c = " + c);

  • 在數組的解構賦值中, 等號左邊的格式必須和等號右邊的格式一模一樣, 才能完全解構
// let [a, b, c] = [1, 3, 5];// let [a, b, c] = [1, 3, [2, 4]];let [a, b, [c, d]] = [1, 3, [2, 4]];console.log("a = " + a);console.log("b = " + b);console.log("c = " + c);console.log("d = " + d);

  • 在數組的解構賦值中, 左邊的個數可以和右邊的個數不一樣
let [a, b] = [1, 3, 5];console.log("a = " + a);console.log("b = " + b);

  • 在數組的解構賦值中, 右邊的個數可以和左邊的個數不一樣
let [a, b, c] = [1];console.log("a = " + a);console.log("b = " + b);console.log("c = " + c);

  • 在數組的解構賦值中,如果右邊的個數和左邊的個數不一樣, 那么我們可以給左邊指定默認值
let [a, b = 666, c = 888] = [1];console.log("a = " + a);console.log("b = " + b);console.log("c = " + c);

  • 在數組的解構賦值中, 如果左邊的個數和右邊的個數不一樣, 那么如果設置默認值會被覆蓋
let [a, b = 666] = [1, 3, 5];console.log("a = " + a);console.log("b = " + b);

  • 在數組的解構賦值中, 還可以使用ES6中新增的擴展運算符來打包剩余的數據
  • 在數組的解構賦值中, 如果使用了擴展運算符, 那么擴展運算符只能寫在最后
  • ES6中新增的擴展運算符: …
// let [a, b] = [1, 3, 5];// let [a, ...b] = [1, 3, 5];let [a, ...b] = [1, 3, 5];console.log("a = " + a);console.log(b);

3.8 數組的空位
  • 描述:當數組的某個位置是空元素,即兩個逗號之間沒有任何值,我們稱該數組存在空位(hole)

注意:

  • 空位是計算數組長度的
  • 空位表現為undefined
  • 如果最后一個元素后面有逗號,這種情況并不會產生空位
<script>var arr = ['a', 'b', , 'e',];console.log(arr.length); //4console.log(arr[2]); //undefined</script>
3.9 在數組中添加新元素(增)
let arr=[1,2,3];arr[3] = 5;console.log(arr);// 增

3.10 數組的’刪除’(刪)
  • 描述:delete命令能夠刪除數組中的元素的值,從而形成空位。
  • 但是delete命令并不會影響length的屬性。
  • 語法:delete arr[下標]
  • delete命令在使用的時候是根據數組下標來對指定數組的值進行刪除的
<script>var arr = ['aa', 'bb', 'cc'];console.log(arr); //["aa", "bb", "cc"]console.log(arr.length); //3delete arr[1];console.log(arr); //["aa", empty, "cc"]console.log(arr[1]); //undefinedconsole.log(arr.length); //3</script>
3.11 改變數組的值(改)
let arr=[1,2,3];arr[0] = 5;console.log(arr);// 改

3.12 數組調用(查)
  • 描述:數組的調用實際上指的是數組元素的調用。
  • 數組元素通過【數組名+下標】的方式來進行訪問。
  • 數組元素一次只能訪問一個,不能一次連續性地訪問多個;要想一次訪問多個那么則需運用for循環
  • 語法:數組名[下標]
<script>var str = ['aa', true, 22];console.log(str[1]); </script>
  • 案例:
//需求2:頁面有一個輸入框用來模擬后臺傳送的數據,//當給出一個包含人名的字符串,點擊按鈕后將字符串轉換成數組,然后打印每個人的名<span>姓名</span><input type="text" id="nameInput" /><button id="outPut">輸出</button> <script>var nameInput = document.getElementById("nameInput");var outPut = document.getElementById("outPut");outPut.onclick = function() {var nameStr = nameInput.value;var nameArr = nameStr.split(',');for (var i in nameArr) {console.log(nameArr[i]);}} </script>

結果:

/*1. 定義一個空數組,循環錄入3門課程的成績求3門課程的總分求3門課程的平均分求3門課程中的最高分和最低分*/let arr = [];let totalScore = 0;let equal = 0;// 存數據for(let i = 0; i < 3; i++){arr[i] = parseFloat(prompt("請輸入第"+ (i+1) + "門課的成績"));}let maxScore = arr[0];let minScore = arr[0];//讀數據for(let j = 0; j < arr.length; j++){// 總分totalScore += arr[j];// 平均分equal = totalScore / 3;// 最高分if(arr[j] > maxScore){maxScore = arr[j];}// 最低分if(arr[j] < minScore) {minScore = arr[j];}}console.log("三門成績的最高分為:" + maxScore);console.log("三門成績的最低分為:" + minScore);console.log("3門成績的總分為:" + totalScore);console.log("3門成績的平均分為:" + equal);

/*要將100元兌換成1元、5元、10元、20元的零錢,每種紙幣可以有也可以沒有,請問共有多少種兌換方式*/let count=0;for(let i = 0; i <= 5; i++){for(let j = 0; j <= 10; j++){for(let k = 0; k <= 20; k++){for(let l = 0; l <= 100; l++){if(i*20 + j*10 + k*5 + l*1 == 100){count++;}}}} }console.log(count);

四、數組常用的方法

4.1 isArray()
  • 描述:判斷變量是否是數組,如果是返回true,否則返回false
  • 語法:Array.isArray();
<script>var arr = ['a', 'b', 'c'];console.log(typeof arr); // objectconsole.log(Array.isArray(arr)); // truevar obj = {};console.log(typeof obj); // objectconsole.log(Array.isArray(obj)); // false </script>
4.2 valueOf()
  • 描述:valueOf方法歸屬于Object對象類型
  • 返回指定對象的原始值
  • 在數組中作用是返回數組本身。
  • 語法:arr.valueOf()
  • javascript的許多內置對象都重寫了該屬性,以實現更適合自身的功能需求。因此,不同對象類型的valueOf()方法的返回值類型均可能不同。
<script>var arr = ['a', 'b', 'c'];console.log(arr); //["a", "b", "c"]console.log(arr.valueOf()); //["a", "b", "c"]console.log(arr === arr.valueOf()); //true </script>
4.3 toString()
  • 描述:能夠將數組轉換成字符串,默認是以逗號隔開
  • 語法:arr.toString()
  • 注意:不僅能夠合并數組元素,對布爾類型也能夠生成
<script>var arr = ['aa', 'bb', 'cc'];var str = arr.toString();console.log(str); //aa,bb,ccvar str = true;console.log(str); //truevar newStr = str.toString();console.log(typeof newStr); //string </script>
4.4 join()
  • 描述:join方法能夠以給定的參數做分隔符,將所有的數組元素組成一個字符串
  • 如果不提供參數,默認使用逗號分隔,就是相當于調用了 toString() 方法
  • 語法:arr.join(‘分隔符’);
  • join()方法不會對原數組造成影響
<script>var str = 'hello sxt! goodbye sxt';var arr = str.split(' ');console.log(arr); // ["hello", "sxt!", "goodbye", "sxt"]console.log(typeof arr); //objectvar newStr = arr.join('==');console.log(newStr); //hello==sxt!==goodbye==sxtconsole.log(typeof newStr) // string </script>
4.5 push()
  • 描述:push方法用于在數組的 末端 添加一個或多個元素,并返回添加后的數組的長度。
  • 語法:arr.push(item1,item2…);

注意:

  • push方法會對原數組造成影響
  • 可以根據需求來決定是否保存punsh方法結果
<script>var arr = [];var arrLength = arr.push('zhangsan', 'lisi');console.log(arr); //["zhangsan", "lisi"]console.log(arrLength); //2var newLength = arr.push('wangwu');console.log(arr); // ["zhangsan", "lisi", "wangwu"]console.log(newLength); //3 </script>
4.6 pop()
  • 描述:pop方法用于刪除數組的最后一個元素,并以字符串的形式返回刪除的這個元素。
  • poop()方法會對原數組造成影響
  • 語法:arr.pop()

注意:

  • pop方法沒有參數
  • pop方法回對原數組造成影響
<script>var arr = ['周杰倫', '楊坤', '劉歡'];var deleteItem = arr.pop();console.log(arr); //['周杰倫', '楊坤']console.log(deleteItem); //劉歡console.log(Array.isArray(deleteItem)); // falseconsole.log(typeof deleteItem); //string </script>
4.7 shift()
  • 描述:shift方法用于刪除數組中的第一個元素,并返回刪除的這個元素
  • shift()方法會對原數組造成影響
  • 語法:arr.shift()

注意:

  • 會對原數組造成影響
<script>var arr = ['周杰倫', '楊坤', '劉歡'];arr.shift();console.log(arr); //["楊坤", "劉歡"]console.log(arr.shift()); //楊坤console.log(arr); //["劉歡"] </script>
4.8 unshift()
  • 描述:unshift方法用于在數組的第一個位置添加元素,并返回添加元素后新數組的長度。
  • unshift()方法會對原數組造成影響
  • 語法:arr.unshift(‘item1’,‘item2’…);

注意:

  • 會對原數組造成影響
<script>var arr = ['周杰倫', '楊坤', '劉歡'];var newArr = arr.unshift('那英');console.log(arr); //["那英", "周杰倫", "楊坤", "劉歡"]console.log(arr.length); //4console.log(newArr); //4 </script>
4.9 reverse()
  • 描述:reverse方法能夠反序排列數組(反序排列)即數組反轉
  • 語法:arr.reverse()
  • reverse()方法會對原數組造成影響

注意:

  • 會改變原數組的結構
<script>var arr = ['aa', 'bb', 'cc'];var newArr = arr.reverse();console.log(newArr); //["cc", "bb", "aa"]console.log(arr); //["cc", "bb", "aa"] </script>

4.10 slice()
  • 描述:slice方法作用是能夠根據指定的【起始點】和【結束點】來對數組進行截取,并生成一個新數組。
  • 新數組的內容是從起始點下標開始的元素到結束點下標的元素,但是不包括結束點下標的元素本身。
  • 語法:arr.slice(fromIndex,toIndex);

注意:

  • 前包后不包
  • 不會對原數組結構更改
<script>var arr = ['aa', 'dd', 'ss', 3, 4, 5, 6, 'ww', 'rr', 'yy'];var newArr = arr.slice(-7, -3);console.log(arr); //["aa", "dd", "ss", 3, 4, 5, 6, "ww", "rr", "yy"]console.log(newArr); // [3, 4, 5, 6] </script>
4.11 splice()
  • 描述:splice方法的作用是在指定下標處截取一定長度的元素,再插入一些新元素,并將刪除的元素構成一個新數組返回。splice方法會改變原本數組。
    -splice() 方法會對原數組造成影響
  • 語法:arr.splice(fromIndex,removeCount,addItem1…)

注意:

  • 會改變原數組的結構
  • 前兩個參數必須有,后面的是可選參數
<script>var arr = ['aa', 'dd', 'ss', 3, 4, 5, 6, 'ww', 'rr', 'yy'];var newArr = arr.splice(3, 4, true, '周杰倫');console.log(arr); //["aa", "dd", "ss", true, "周杰倫", "ww", "rr", "yy"] </script>
4.12 sort()
  • 描述:對數組進行排序,根據提供的排序規則,默認按照編碼方式排序
  • 語法:arr.sort(排序的規則);
  • soort()方法會對原數組造成影響
<script>var arr = [126, 100, 22, 35, 88];var newArr = arr.sort();console.log(newArr); //[100, 126, 22, 35, 88]let arr = [1,2,4,5];arr.sort((a,b)=> {// return a -b;升序排列return b -a;//降序}) </script>
4.13 indexOf()
  • 描述:indexOf方法能夠從前到后檢索數組,并返回元素在數組中的第一次出現的下標,如果沒有索引到則返回-1
  • indexOf方法默認是從左至右的查找, 一旦找到就會立即停止查找
  • 語法:arr.indexOf(item,fromIndex)

注意:

  • 第一個參數是可選的,表示從第幾個下標開始向后查找
  • 第二個參數可以是負值,表示從倒數第幾個下標開始向后查找
<script>var arr = ['國際章', '汪峰', '周杰倫', '國際章', '哈林'];var index = arr.indexOf('國際章', -2);console.log(index); //3 </script>
4.14 lastIndexOf()
  • 描述:lastIndexOf方法能夠從后向前檢索數組,并返回元素在數組中的最后一次出現的下標,如果沒有索引到則返回-1
  • lastIndexOf方法默認是從右至左的查找, 一旦找到就會立即停止查找
  • 語法:arr.lastIndexOf(item,fromIndex)
<script>var arr = ['國際章', '汪峰', '周杰倫', '國際章', '哈林'];var index = arr.lastIndexOf('國際章', 2);console.log(index); //0 </script>
4.15 concat()

數組拼接;不會修改原有的數組,會生成一個新數組返回

let arr1=[1,2,3,4,5];let arr2=[6,7];let arr3=[8,9];let arr=arr1.concat(arr2,arr3);//或:let arr=[...arr1,...arr2,...arr3];//console.log(arr);

注意點:
數組不能夠使用加號進行拼接, 如果使用加號進行拼接會先轉換成字符串再拼接

let arr1 = [1, 3, 5];let arr2 = [2, 4, 6];// 注意點: 數組不能夠使用加號進行拼接, 如果使用加號進行拼接會先轉換成字符串再拼接let res = arr1 + arr2;console.log(res);console.log(typeof res);

在ES6中還有一種更簡單的方法可以去拼接數組:那就是利用擴展運算符 …

  • 擴展運算符在解構賦值中(等號的左邊)表示將剩余的數據打包成一個新的數組
  • 擴展運算符在等號右邊, 那么表示將數組中所有的數據解開, 放到所在的位置
  • 不會修改原有的數組, 會生成一個新的數組返回給我們
let arr1 = [1, 3, 5];let arr2 = [2, 4, 6];let res = [...arr1, ...arr2]; // let res = [1, 3, 5, 2, 4, 6];console.log(res);console.log(typeof res);console.log(arr1);console.log(arr2);

4.16 split()

根據指定格式切割字符串,轉換成一個數組后返回給我們

let arr1="1,2,3";let arr=arr1.split(",");

4.17 toString()

將數組轉換成字符串

let arr1=[1,2,3,4,5];let arr=arr1.toString();console.log(arr);

五、補充

5.1 forEach 快速遍歷

forEach函數的參數是一個匿名函數,該匿名函數會在forEach函數的內部調用,這種函數又被稱為回調函數。
傳入的回調函數要求有3個形參,分別是一次循環的數組的數據、正在循環的下標、數組本身

?let arr = [1, 3, 5, 7, 9];arr.forEach(function(currentValue, currentIndex, currentArray) {console.log(currentValue, currentIndex, currentArray);console.log(currentValue);});//自定義forEach//Array.prototype.myForEach = function(fn) {// this === [1, 3, 5, 7, 9]// for (let i = 0; i < this.length; i++) {// fn(this[i], i, this);// }//};//arr.myForEach(function(currentValue, currentIndex, currentArray) {// console.log(currentValue, currentIndex, currentArray);//});

??????

5.2 for in 循環

在企業開發中不推薦使用forin循環來遍歷數組

let arr = [1, 3, 5, 7, 9];// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...infor (let key in arr) {// console.log(key);console.log(arr[key]);}

注意點:

  • 對象中的屬性是無序的
  • forin循環是專門用于遍歷對象的, 但是對象的屬性是無序的, 所以forin循環就是專門用于遍歷無序的東西的, 所以不推薦使用forin循環來遍歷數組
5.3 for of循環

創建一個循環遍歷 可迭代對象 ,包括:內置對象String、Array、arguments、NodeList、TypedArray、Map、Set和用戶定義的可迭代對象
該循環調用一個自定義迭代鉤子,其中包含要為對象的每個不同屬性的值執行的語句

let arr = [1, 3, 5, 7, 9];// 3.利用ES6中推出的for of循環來遍歷數組for (let value of arr) {console.log(value);}
5.4 reduce()

對數組中的每個元素按序執行一個由您提供的 reducer 函數,每一次運行 reducer 會將先前元素的計算結果作為參數傳入,最后將其結果匯總為單個返回值

第一次執行回調函數時,不存在“上一次的計算結果”

如果需要回調函數從數組索引為 0 的元素開始執行,則需要傳遞初始值。否則,數組索引為 0 的元素將被作為初始值 initialValue,迭代器將從第二個元素開始執行(索引為 1 而不是 0)

reducer 逐個遍歷數組元素,每一步都將當前元素的值與上一步的計算結果相加(上一步的計算結果是當前元素之前所有元素的總和)——直到沒有更多的元素被相加

? // Arrow function reduce((previousValue, currentValue) => { /* ... */ } ) reduce((previousValue, currentValue, currentIndex) => { /* ... */ } ) reduce((previousValue, currentValue, currentIndex, array) => { /* ... */ } ) reduce((previousValue, currentValue, currentIndex, array) => { /* ... */ }, initialValue)// Callback function reduce(callbackFn) reduce(callbackFn, initialValue)// Inline callback function reduce(function(previousValue, currentValue) { /* ... */ }) reduce(function(previousValue, currentValue, currentIndex) { /* ... */ }) reduce(function(previousValue, currentValue, currentIndex, array) { /* ... */ }) reduce(function(previousValue, currentValue, currentIndex, array) { /* ... */ }, initialValue)

一個 “reducer” 函數,包含四個參數:

  • previousValue:上一次調用 callbackFn 時的返回值。在第一次調用時,若指定了初始值 initialValue,其值則為 initialValue,否則為數組索引為 0 的元素 array[0]。
  • currentValue:數組中正在處理的元素。在第一次調用時,若指定了初始值 initialValue,其值則為數組索引為 0 的元素 array[0],否則為 array[1]。
    currentIndex:數組中正在處理的元素的索引。若指定了初始值 initialValue,則起始索引號為 0,否則從索引 1 起始
  • array:用于遍歷的數組
  • initialValue:作為第一次調用 callback 函數時參數 previousValue 的值。若指定了初始值 initialValue,則 currentValue 則將使用數組第一個元素;否則 previousValue 將使用數組第一個元素,而 currentValue 將使用數組第二個元素

累加:

let arr = [1,4,5,6]; let sum = arr.reduce((x,y)=>{return x + y; }) console.log(sum); // 16

數組去重:

const arr = [4,5,7,5,4,7,9]; const resultArr = arr.reduce((prev, current) => {prev.indexOf(current) == -1 && prev.push(current)return prev; }, []); console.log(resultArr); // [ 4, 5, 7, 9 ]

二維數組降維:

const arr = [1,4,5,[7,8,9,23]]; // const resultArr = arr.reduce((x,y) => { // return x.concat(y) // }, []) const resultArr = arr.reduce((x,y) => x.concat(y) , []) console.log(resultArr); // [ 1, 4, 5, 7, 8, 9, 23 ]

更多請參考官網:reduce官網(MDN)

5.5 findIndex()

以前數組查找的方法:

  • 從左往右查找, 找到返回索引, 找不到返回-1(.indexOf())
  • 從右至左查找, 找到返回索引, 找不到返回-1(.lastIndexOf())
  • 從左往右查找, 找到返回true, 找不到返回false(.includes())

定制版的indexOf, 找到返回索引, 找不到返回-1

let arr = [3, 2, 6, 7, 6];let index = arr.findIndex(function(currentValue, currentIndex, currentArray) {console.log(currentValue, currentIndex, currentArray);if (currentValue === 10) {return true;}});console.log(index);


更多詳情查看官方文檔:finedIndex

自定義findIndex

let arr = [3, 2, 6, 7, 6];// findIndex實現Array.prototype.myFindIndex = function(fn) {for (let i = 0; i < this.length; i++) {let result = fn(this[i], i, this);if (result) {return i;}}return -1;}let index = arr.myFindIndex(function(currentValue, currentIndex, currentArray) {// console.log(currentValue, currentIndex, currentArray);// if(currentValue === 6){if (currentValue === 10) {return true;}});console.log(index);
5.6 find()

find方法如果找到了就返回找到的元素, 如果找不到就返回undefined

?let arr = [3, 2, 6, 7, 6];let value = arr.find(function(currentValue, currentIndex, currentArray) {console.log(currentValue, currentIndex, currentArray);// if(currentValue === 6){if (currentValue === 10) {return true;}});console.log(value);

自定義find

let arr = [3, 2, 6, 7, 6];// find實現Array.prototype.myFind = function(fn) {for (let i = 0; i < this.length; i++) {let result = fn(this[i], i, this);if (result !== undefined) {return result;}}return undefined;}let index = arr.myFind(function(currentValue, currentIndex, currentArray) {// console.log(currentValue, currentIndex, currentArray);// if(currentValue === 6){if (currentValue === 10) {return true;}});console.log(index);
5.7 map()

將滿足條件的元素映射到一個新的數組中

let arr = [1, 2, 3, 4, 5];let newArray = arr.map(function(currentValue, currentIndex, currentArray) {// console.log(currentValue, currentIndex, currentArray);if (currentValue % 2 === 0) {return currentValue;}});console.log(newArray); // [undefined, 2, undefined, 4, undefined]/*let newArray = arr.myMap(function(currentValue, currentIndex, currentArray) {// console.log(currentValue, currentIndex, currentArray);if (currentValue % 2 === 0) {return currentValue;}});Array.prototype.myMap = function(fn) {let newArray = new Array(this.length);newArray.fill(undefined);for (let i = 0; i < this.length; i++) {let result = fn(this[i], i, this);if (result !== undefined) {newArray[i] = result;}}return newArray;}*/
5.8 every()

判斷數組中的數據是否全部滿足某個條件,當所有數據都滿足某個條件時,返回true,否則返回false
?
測試一個數組內的所有元素是否都能通過某個指定函數的測試。它返回一個布爾值

若收到一個空數組,此方法在一切情況下都會返回 true

語法:

arr.every(callback(element[, index[, array]])[, thisArg])
callback:用來測試每個元素的函數,它可以接收三個參數:

element:用于測試的當前值。

index可選:用于測試的當前值的索引。

array可選:調用 every 的當前數組。

thisArg:執行 callback 時使用的 this 值

every 方法為數組中的每個元素執行一次 callback 函數,直到它找到一個會使 callback 返回 falsy 的元素。如果發現了一個這樣的元素,every 方法將會立即返回 false。否則,callback 為每一個元素返回 true,every 就會返回 true。callback 只會為那些已經被賦值的索引調用。不會為那些被刪除或從未被賦值的索引調用。

every 和數學中的"所有"類似,當所有的元素都符合條件才會返回true。正因如此,若傳入一個空數組,無論如何都會返回 true

const isBelowThreshold = (currentValue) => currentValue < 40;const array1 = [1, 30, 39, 29, 10, 13];console.log(array1.every(isBelowThreshold));

更多請參考官網:every用法

5.9 some()

判斷數組中的數據是否至少有一個滿足某個條件,當有一個數據滿足某個條件時,返回true,否則返回false
?
測試數組中是不是至少有1個元素通過了被提供的函數測試,接受三個參數

返回的是一個Boolean類型的值

語法:

arr.some(callback(element[, index[, array]])[, thisArg])
callback:用來測試每個元素的函數,接受三個參數:

element:數組中正在處理的元素。

index 可選:數組中正在處理的元素的索引值。

array可選

some()被調用的數組。

thisArg可選:執行 callback 時使用的 this 值。

some() 為數組中的每一個元素執行一次 callback 函數,直到找到一個使得 callback 返回一個“真值”(即可轉換為布爾值 true 的值)。如果找到了這樣一個值,some() 將會立即返回 true。否則,some() 返回 false。callback 只會在那些”有值“的索引上被調用,不會在那些被刪除或從來未被賦值的索引上調用

some() 遍歷的元素的范圍在第一次調用 callback. 前就已經確定了。在調用 some() 后被添加到數組中的值不會被 callback 訪問到。如果數組中存在且還未被訪問到的元素被 callback 改變了,則其傳遞給 callback 的值是 some() 訪問到它那一刻的值。已經被刪除的元素不會被訪問到

const array = [1,2,3,4,5]; const even = (element) => element % 2 === 0; console.log(array.some(even));

更多請參考官網:some函數

5.10 filter()

將數組中滿足條件的數據保存在一個新數組中并返回

?let arr = [1, 2, 3, 4, 5];let newArray = arr.filter(function(currentValue, currentIndex, currentArray) {// console.log(currentValue, currentIndex, currentArray);if (currentValue % 2 === 0) {return true;}});console.log(newArray); // [2, 4]/*實現自定義的filter方法let arr = [1, 2, 3, 4, 5];// filter實現Array.prototype.myFilter = function(fn) {let newArray = [];for (let i = 0; i < this.length; i++) {let result = fn(this[i], i, this);if (result) {newArray.push(this[i]);}}return newArray;};let newArray = arr.myFilter(function(currentValue, currentIndex, currentArray) {// console.log(currentValue, currentIndex, currentArray);if (currentValue % 2 === 0) {return true;}});console.log(newArray); // [2, 4]*/

?

5.11 刪除數組元素注意點
?let arr = [1, 2, 3, 4, 5];// 需求: 遍歷的同時刪除數組中所有元素// arr.splice(2, 1);// delete arr[2];console.log(arr);let len = arr.length; //length會變化,因此先保存//刪除完元素后,后面的元素會向前挪動,因此我們需要從后向前刪,這樣才能刪干凈for (let i = len - 1; i >= 0; i--) {arr.splice(i, 1);}// 方式2// for (let i = 0; i < arr.length; i++) {// console.log(arr.length);// // 注意點: 通過delete來刪除數組中的元素, 數組的length屬性不會發生變化// delete arr[i];// }console.log(arr);
5.12 常用的清空數組的幾種方式:
let arr=[1,2,3,4,5];//方式1// arr=[];//方式2// arr.length=0;//方式3arr.splice(0,arr.length);

5.13 如何判斷數組中是否包含某個元素
  • 可以通過indexOf和lastIndexOf的結果, 判斷是否是-1即可
let arr = [1, 2, 3, 4, 5];let res = arr.indexOf(8);let res1 = arr.lastIndexOf(8);console.log(res);console.log(res1);

  • 通過 includes() 方法
let arr = [1, 2, 3, 4, 5];let res = arr.includes(8);let res1 = arr.includes(4);console.log(res);console.log(res1);

5.14 綜合案例
示例1:
//輸入0~9,輸出0~9中哪些數是用戶未輸入過的let str=prompt("請輸入三個整數,用逗號隔開");let arr=str.split(",");let newArr=new Array(10);for(let i=0;i<arr.length;i++){let str=arr[i];newArr[str]=10;}for(let j=0;j<newArr.length;j++){if(newArr[j]===10){continue;}console.log(j);}// console.log(newArr);

示例2:
//輸入5個0~9的數字,排序后輸出let str=prompt("請輸入五個整數,用逗號隔開");let arr=str.split(",");let newArr=new Array(10);//數組中fill方法:設置數組中所有元素的值為指定的數據newArr.fill(0);for(let i=0;i<arr.length;i++){let str=arr[i];newArr[str]+=1;}for(let i=0;i<newArr.length;i++){for(let m=0;m<newArr[i];m++){console.log(i);}}

示例3:
/*2.要求用戶輸入3個0~9的數, 輸出0~9中哪些用戶沒有輸入過* 輸入的格式x,y,z* */let str = prompt("請輸入三個整數, 用逗號隔開");// console.log(str); // 1,3,5// 字符串的split方法可以根據傳入的參數切割字符串, 轉換成一個數組之后返回給我們let arr = str.split(",");// console.log(arr);//方法1--擴展性不好/*for(let i = 0; i < 10; i++){if(arr[0] == i || arr[1] == i || arr[2] == i){continue;}console.log(i);}*//*方法2:推薦思路:定義一個長度為10的數組,不去設置它的初始值,那么這樣一來數組里面的每一個下標所對應的值都是 undefined然后將輸入的值,比如“1,3,5”當作新定義的數組的索引(下標),并且賦給一具體的值,比如 666,這樣一來的話那么新數組中索引為 1 3 5 的下標所對應的值都為 666此時只需去循環新數組,并且判斷新數組中如果有索引值所對應的數組內容是 666 的,那么就退出當前循環,進行下一次循環,輸出非 666 所對應的索引即就是0~9中用戶沒有輸入過的數字*/// 0 1 2 3 4 5 6// [undefined, 666, undefined, 666, undefined, 666, undefined, undefined, undefined, undefined]let res = new Array(10);// 循環切割后形成的數組,for(let i = 0; i < arr.length; i++){// 取出用戶輸入的每個數let str = arr[i];// console.log(str);// 將取出的數當作新數組的索引存入新數組,并賦一相同的固定值res[str] = 666;}// console.log(res);for(let i = 0; i < res.length; i++){if(res[i] === 666){continue;}console.log(i);}

示例4:
/*2.從接盤接收5個0~9的數字, 排序后輸出* 輸入的格式x,y,z,...* 2, 6, 3, 8, 1* 2, 6, 3, 8, 3 --> 2,3,3,6,8* */// 0 1 2 3 4 5 6 7 8 9// [u, 6, 6, 6, u, u, 6, u, 6, u]// [u, u, 1, 2, u, u, 1, u, 1, u]// [0, 0, 1, 2, 0, 0, 1, 0, 1, 0]let str = prompt("請輸入五個整數, 用逗號隔開");let arr = str.split(",");let res = new Array(10);// 數組的fill方法的作用: 設置數組中所有元素的值為指定的數據res.fill(0); // 將數組中所有的元素的值都設置為0// [2, 6, 3, 8, 3]// 遍歷用戶輸入的數據for(let i = 0; i < arr.length; i++){let str = arr[i]; // 2 6 3 8 3// 第一種//res[str]=6; // 有小問題 假設輸入:2, 6, 3, 8, 3,期望輸出:2,3,3,6,8,但是實際并不是/*res[2] = 0 + 1*/res[str] = res[str] + 1;}for(let i = 0; i < res.length; i++){// 第一種// if(res[i] === 6){// console.log(i);// }for(let j = 0; j < res[i]; j++){// console.log(i);console.log(i);// 輸出下標}}

示例5

如果 compareFunction(a, b) 小于 0 ,那么 a 會被排列到 b 之前;

如果 compareFunction(a, b) 等于 0 , a 和 b 的相對位置不變。

如果 compareFunction(a, b) 大于 0 , b 會被排列到 a 之前

注意點: 如果元素是字符串類型, 那么比較的是字符串的Unicode編碼

let arr = ["c", "a", "b"];// if里面返回的和else if里面返回的要相反arr.sort(function(a, b) {if (a > b) {return -1; //降序} else if (a < b) {return 1;} else {return 0;}});console.log(arr);
示例6

如果數組中的元素是數值類型
如果需要升序排序, 那么就返回a - b;
如果需要降序排序, 那么就返回b - a;

let arr = [3, 4, 2, 5, 1];// arr.sort();arr.sort(function(a, b) {// return a - b;return b - a;});console.log(arr);
示例7

按元素長度排

let arr = ["1234", "21", "54321", "123", "6"];arr.sort(function(str1, str2) {// return str1.length - str2.length;//由短到長return str2.length - str1.length; //由長到短});console.log(arr);
示例8

按對象的年齡排

let students = [{name: "zs",age: 34}, {name: "ls",age: 18}, {name: "ww",age: 22}, {name: "mm",age: 28}, ];students.sort(function(o1, o2) {// return o1.age - o2.age;//升序return o2.age - o1.age; //降序});console.log(students);

六、二維數組概述

  • 描述:數組中的元素為數組
  • 語法:var arr=[[item1,item2],[item3,item4]…]

其實二維數組的調用很簡單,有兩個下標。第一個下標表示外層數組的下標,第二個下標表示內層數組的下標。在這里就不去過多的去進行闡述了,相關用法和方法可以參考前面的數組里的方法。

一維數組及其相關方法

注意:

  • 二維數組是一種特殊形式的數組,數組中的方法在二維數組中仍然適用

案例1:

<script>var infoArr = [['zhangsan', 22, 'male'],['lisi', 23, 'male'],['wangwu', 22, 'female']];console.log(infoArr); //[Array(3), Array(3), Array(3)]var newArr = infoArr[1];console.log(newArr); //["lisi", 23, "male"]var nameArr = newArr[0];console.log(nameArr); //lisiconsole.log(infoArr[1][1]); //23var allBookArr = [];var bookInfo1 = ['紅樓夢', '曹雪芹', '無價1'];var bookInfo2 = ['西游記', '吳承恩', '無價2'];var bookInfo3 = ['三國演義', '羅貫中', '無價3'];allBookArr.push(bookInfo1);allBookArr.push(bookInfo2);allBookArr.push(bookInfo3);console.log(allBookArr); //[Array(3), Array(3), Array(3)]console.log(allBookArr[1][1]); //吳承恩 </script>

案例2:

// 循環錄入 5 名同學的姓名、身高、年齡,并將信息存入到二維數組里let students = [];for(let i = 0; i < 5; i++){let student = [];student.push(prompt("請輸入你的姓名:"));student.push(parseInt(prompt("請輸入你的年齡:")));student.push(parseFloat(prompt("請輸入你的身高:")));students.push(student);}// 用 table 的方式輸出console.log("姓名\t身高\t年齡");//循環輸出for(var j = 0; j < students.length; j++){console.log(students[j][0] + "\t" + students[j][1] + "\t" + students[j][2]);}//查找名稱為 張三 的學生,并刪除他的信息let index = -1;for(var k = 0; k < students.length; k++){if(students[k][0] == "張三"){index = k;break;}}if(index == -1){console.log("未找到該名學生!");}else {students.splice(index,1);}//根據學生的身高從高到低進行排序(選擇排序)// students.sort((a,b) => {// return a[2] - b[2];// })for(let l = 0; l < students.length - 1; l++){for(let m = l + 1; m < students.length; m++){if(students[l][2] > students[m][2]){let temp = students[l];students[l] = students[m];students[m] = temp;}}}console.log(students);

總結

以上是生活随笔為你收集整理的JS基础之数组--概述、创建数组的几种方式、数组的特点、数组的常用方法、数组的解构赋值、数组高级API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

97在线观看视频国产 | 肉色欧美久久久久久久免费看 | 91网站观看| 日女人电影| 美女视频a美女大全免费下载蜜臀 | 草久在线观看 | 国产精品激情 | 欧美日韩国产精品一区二区 | 天堂在线视频免费观看 | 久产久精国产品 | 五月婷在线播放 | 国产精品毛片久久久久久久久久99999999 | 欧美黄污视频 | 天天夜夜操 | 在线观看亚洲国产精品 | 奇米网444| 五月婷婷av在线 | 国产免费专区 | 黄色一级在线观看 | 三上悠亚在线免费 | 久久免费视频在线 | 91精品人成在线观看 | 亚洲精品影院在线观看 | 欧美精品少妇xxxxx喷水 | 欧美激情第28页 | 亚洲三级黄色 | 久久激情网站 | 超碰在线人 | 久久激情视频网 | 97视频精品| 中文一区在线观看 | 免费久久网站 | 亚洲精品网站 | 亚洲黄色网络 | 亚洲精品自拍 | 亚洲精品中文在线资源 | 免费av看片 | 狠狠做深爱婷婷综合一区 | 日日夜夜人人精品 | 久久婷婷色综合 | 亚洲精品黄网站 | 国产精品mv在线观看 | 久草精品视频在线观看 | 欧美成人亚洲成人 | 人人爽人人干 | 婷婷五综合 | 91高清免费观看 | 国内精品福利视频 | 久草视频一区 | 99综合电影在线视频 | 亚洲,国产成人av | 51久久成人国产精品麻豆 | 4p变态网欧美系列 | 国产精品成人自拍 | 亚洲精品一区二区18漫画 | 日韩最新av在线 | 天天干天天碰 | 国产九九在线 | 丁香六月激情婷婷 | 九九久久精品视频 | av一区二区三区在线观看 | 国产日韩欧美视频 | 激情综合亚洲精品 | 亚洲色图激情文学 | 丁香六月婷婷开心 | 婷婷视频在线 | 国产伦精品一区二区三区无广告 | 成人午夜片av在线看 | 一区二区三区免费在线观看视频 | 国产一区二区三区高清播放 | 91av欧美| 中文字幕av全部资源www中文字幕在线观看 | 午夜av在线| 国产欧美精品一区二区三区四区 | 欧美午夜a | 国产精品自产拍在线观看网站 | 亚洲成人家庭影院 | 一区二区三区国 | 日韩精品视频免费看 | 日韩电影一区二区三区 | 国产精品成人久久 | 在线黄色av电影 | 在线观看视频亚洲 | 国产精品无av码在线观看 | 国产精品精品国产色婷婷 | 久在线观看视频 | av中文字幕剧情 | 99精品热视频只有精品10 | 日韩毛片久久久 | 天天干,夜夜操 | 亚洲特级片 | 在线综合 亚洲 欧美在线视频 | 天天玩夜夜操 | 一级一片免费观看 | 久久综合综合久久综合 | 天天爽天天搞 | 国产色视频网站 | 91大神精品视频在线观看 | 黄色三级久久 | 97天堂网| 人人爽人人干 | 91麻豆精品一区二区三区 | 午夜视频福利 | 一二三久久久 | 99精品视频在线播放观看 | 久久免费视频这里只有精品 | 精品在线视频观看 | 永久免费av在线播放 | 免费午夜视频在线观看 | 国产精品毛片一区视频播 | 精品亚洲欧美一区 | 日本在线观看一区二区三区 | 91热爆视频 | 日韩成人精品在线观看 | 成人在线播放免费观看 | 日本久久久久久久久久久 | 蜜臀av性久久久久蜜臀av | 深爱激情站 | 超碰在线94 | 精品视频亚洲 | 一区二区三区四区在线免费观看 | 色婷婷六月天 | 亚洲精品免费播放 | 美女视频免费一区二区 | 亚洲日本欧美在线 | 欧美激情视频一二区 | 日韩精品一区二区三区第95 | 中文超碰字幕 | 91男人影院 | 国产五码一区 | 99视频在线免费观看 | 最近日本字幕mv免费观看在线 | 中文字幕在线一区二区三区 | 黄色软件视频大全免费下载 | 国产精品久久久久久久久费观看 | 亚洲精品在线视频网站 | 国产自产高清不卡 | 麻豆播放 | 少妇性bbb搡bbb爽爽爽欧美 | av官网在线 | 婷婷社区五月天 | 99久高清在线观看视频99精品热在线观看视频 | 国产日韩精品在线观看 | 九九热精 | 色婷婷伊人 | 91chinese在线 | 亚洲一级国产 | 夜夜操天天| 韩国一区二区三区在线观看 | 亚洲日韩欧美一区二区在线 | 超碰成人免费电影 | 久久不卡国产精品一区二区 | 国产黄色理论片 | 日韩激情免费视频 | 国产精品视频在线观看 | 99亚洲精品视频 | www.com黄色 | 欧美成人精品欧美一级乱黄 | 日本久久高清视频 | 91精品啪在线观看国产线免费 | 亚洲精品看片 | 米奇影视7777 | 中文字幕视频 | 五月天高清欧美mv | 国内精品久久久久影院日本资源 | 91成人精品一区在线播放69 | 日韩毛片一区 | 91亚洲精品久久久中文字幕 | 婷婷激情五月综合 | 国产精品对白一区二区三区 | 国产视频日韩视频欧美视频 | 看片网站黄色 | 九九九九精品九九九九 | 在线一二三四区 | 91福利视频免费观看 | 蜜臀av性久久久久蜜臀av | 九九久久婷婷 | 蜜臀久久99精品久久久久久网站 | 午夜aaaa| av电影久久| 久久黄色小说 | 久久久久成人精品免费播放动漫 | 黄色大片视频网站 | 97精品国产97久久久久久春色 | 欧美精品v国产精品v日韩精品 | 国产精品一区二区三区在线免费观看 | 国产精品乱码高清在线看 | 精品欧美乱码久久久久久 | 日韩欧美一区二区三区免费观看 | 国产精品av一区二区 | 狠狠狠干 | 精品欧美一区二区三区久久久 | 日韩在线观看第一页 | 亚洲欧美在线视频免费 | 色综合久久久久久中文网 | 成人久久| 在线看黄色的网站 | 嫩草91影院 | 日本激情视频中文字幕 | 狠狠色伊人亚洲综合成人 | 亚洲国产最新 | 成人免费在线视频观看 | 国产一区二区高清视频 | 国产精品黑丝在线观看 | 欧美日韩国产网站 | 久久人人97超碰精品888 | 欧美精品乱码久久久久久 | 丁香九月婷婷综合 | av短片在线 | 成人在线免费观看网站 | 久久狠狠婷婷 | 国产一区二区久久精品 | 黄色av电影网 | 天天综合色 | 久久99精品国产99久久6尤 | 久久久久久久久久影视 | 亚洲最新视频在线播放 | 欧美日韩午夜爽爽 | 日韩理论片 | 国产尤物在线观看 | 久久艹中文字幕 | 久久免费播放 | 欧美一级片免费播放 | 日韩色视频在线观看 | 免费一级片在线 | 欧美性大胆 | 国产视频中文字幕 | 九九热中文字幕 | 日韩在线视频在线观看 | 久久精品视频2 | 日本在线精品视频 | 婷婷精品国产一区二区三区日韩 | 人人澡人人添人人爽一区二区 | 337p日本欧洲亚洲大胆裸体艺术 | 看片网站黄 | a精品视频| 日本久久高清视频 | 天天干天天综合 | 亚洲精品自拍视频在线观看 | 国产亚洲91| 欧美一进一出抽搐大尺度视频 | 999久久国产精品免费观看网站 | 亚洲理论在线 | 国产精品a级 | 一本一本久久a久久精品牛牛影视 | 深爱激情五月婷婷 | 高清国产午夜精品久久久久久 | 亚洲va在线va天堂 | 国产一区二区在线观看免费 | 伊人亚洲综合网 | 日本精品在线视频 | 日韩一区二区免费视频 | 久久九精品 | avsex| 欧美日韩有码 | 亚洲男女精品 | 一区二区三区在线免费 | 精品免费一区二区三区 | 国内丰满少妇猛烈精品播 | 伊人婷婷综合 | 中文字幕在线观看网站 | 久久久久观看 | 日日夜夜精品视频天天综合网 | 国产一区二区在线播放 | 最新免费av在线 | 免费看一级特黄a大片 | 在线观看视频你懂 | 99久久精| 国产精品久久久久国产a级 激情综合中文娱乐网 | 午夜视频免费 | 懂色av懂色av粉嫩av分享吧 | 久操视频在线播放 | 深爱激情av | 日韩,中文字幕 | 欧美经典久久 | 香蕉久久国产 | 在线播放日韩av | 久久国产乱 | 中文字幕乱视频 | 天天翘av| 日韩二区在线观看 | 国产高清久久久久 | 欧美精品在线观看免费 | 色丁香久久 | 黄色av一区二区 | 日韩在线视频国产 | 人人揉人人揉人人揉人人揉97 | 在线观看一 | 色多多污污 | 欧美最猛性xxx | 免费黄色a网站 | 91av原创| 91精品久久久久久粉嫩 | 欧美日韩激情视频8区 | 亚洲成人精品影院 | 日本mv大片欧洲mv大片 | 欧美成人亚洲成人 | 欧美人体xx | 国产真实精品久久二三区 | 久久综合九色综合久久久精品综合 | 国产手机在线 | www天天操| 区一区二在线 | 国产在线不卡一区 | 天天操夜夜操夜夜操 | 伊人五月天综合 | 国产精品久久久久久久久久久免费 | 成年人免费在线观看网站 | 日韩欧美在线视频一区二区 | 99久久精品无免国产免费 | 人人讲下载 | 81精品国产乱码久久久久久 | 91视频在线观看免费 | 水蜜桃亚洲一二三四在线 | 色中色亚洲 | 日批网站在线观看 | 欧美a在线看 | 中文字幕一区二区在线观看 | 国产精品视频 | 免费在线精品视频 | 69国产精品视频 | 视频在线精品 | 久久久久久看片 | 免费观看完整版无人区 | 丁香激情网 | 亚洲精品理论片 | 一本色道久久综合亚洲二区三区 | 精品二区久久 | 日日草天天草 | 精品在线观看一区二区三区 | 日韩久久久久久久 | 中文字幕有码在线 | 日韩精品一区二区免费视频 | www.夜夜爱 | 九九热免费视频在线观看 | 欧美性黑人 | 在线观看免费国产小视频 | 91亚色免费视频 | 天天操天天摸天天射 | 日韩精品一区二区三区视频播放 | 丁香六月在线观看 | 在线视频观看亚洲 | 在线观看免费高清视频大全追剧 | 在线观看www. | 亚洲成人影音 | 91最新在线观看 | 日本夜夜草视频网站 | 特级毛片网站 | 日韩免费 | 欧美精品免费在线观看 | 天天色天天搞 | 国产超碰97 | 丁香五月网久久综合 | 国产福利91精品张津瑜 | 久久久久久久久久毛片 | 久久综合免费视频 | 99精品在线播放 | 在线免费观看的av网站 | 久久激五月天综合精品 | 久久国产成人午夜av影院潦草 | 黄色a级片在线观看 | 日韩电影中文字幕在线观看 | 日韩av在线免费看 | 日韩色中色 | 超级av在线 | a黄在线观看| 亚洲一级二级三级 | 青青河边草手机免费 | 99精品福利| 狠狠色丁香婷婷综合基地 | 99热999 | 日韩精品久久久免费观看夜色 | 人人澡人人添人人爽一区二区 | 亚洲成人av在线播放 | 四虎在线免费观看视频 | 一区二区三区高清在线 | 欧美日韩中文国产一区发布 | 美女视频免费一区二区 | 91中文字幕永久在线 | 国产一级大片免费看 | 日本激情视频中文字幕 | 国产精品久久久久aaaa九色 | 综合色播 | 国产午夜精品一区二区三区嫩草 | 三级黄色免费 | 91av片| 久久激情视频 久久 | 色婷婷精品大在线视频 | 国产精品一区二区你懂的 | 久久国产亚洲视频 | 99精品电影| 色婷婷久久一区二区 | 欧美国产一区在线 | 成人黄大片视频在线观看 | 免费av片在线 | 在线有码中文 | 国产精品一区二区在线观看免费 | 黄色网www | 免费av福利 | 91资源在线 | 超碰国产人人 | 亚洲精品视频偷拍 | av大片免费 | 中文字幕乱偷在线 | 国产麻豆精品免费视频 | 色综合久久天天 | 69性欧美| 91看片在线看片 | av福利超碰网站 | 中文字幕免费在线看 | 日本护士撒尿xxxx18 | av电影不卡在线 | 亚洲激情校园春色 | 中文av在线播放 | www.久久久.com | 日韩理论影院 | 91亚洲精品在线观看 | 99免费在线视频 | 久久久久成 | 国产色网站| 狠狠色噜噜狠狠 | 五月婷香| 国产1区2区 | 国产区av在线 | 久久人人爽人人片 | 一级免费看视频 | 久久不射电影院 | 五月激情六月丁香 | 日韩手机在线观看 | 久久综合狠狠综合久久综合88 | 天天色天天色天天色 | 欧美精品亚洲二区 | 亚洲精品视频在 | 成人av中文字幕在线观看 | 国产在线观看中文字幕 | 国产日产精品久久久久快鸭 | av免费在线免费观看 | 国产理论免费 | 97精品在线 | 丁香九月激情 | 日本中文字幕视频 | 日本在线观看中文字幕无线观看 | 免费又黄又爽 | 青青河边草免费观看 | 成年免费在线视频 | 成人av免费在线播放 | 久久国产网 | av电影免费看 | 国内偷拍精品视频 | 久久综合免费 | 国产精品福利在线 | 国产成人精品综合久久久 | 98涩涩国产露脸精品国产网 | 九九免费观看全部免费视频 | 久久免费视频一区 | av免费在线播放 | 国产伦精品一区二区三区照片91 | 中文字幕国产在线 | 92中文资源在线 | 国产精品福利在线观看 | 99热在线国产 | 成年人天堂com | 国产日产欧美在线观看 | av网站免费在线 | 狠狠操狠狠干天天操 | 国内精品久久久久国产 | 精品久久一区二区三区 | 欧美激情视频久久 | 中文国产在线观看 | 欧美韩国日本在线观看 | 丁香国产视频 | 国产亚洲资源 | 久久黄色影视 | 久久精品日产第一区二区三区乱码 | 91新人在线观看 | 日日夜夜操av | 99视频在线免费播放 | 国产视频99 | 日韩激情第一页 | 国产日韩欧美网站 | 日韩在线大片 | 香蕉视频亚洲 | 91中文字幕永久在线 | 精品999久久久 | 国产高清视频在线免费观看 | 日本久久综合网 | 欧美国产一区二区 | 精品99999 | 亚洲精品综合在线观看 | 精品99在线| av电影在线观看完整版一区二区 | 久久久久久美女 | 国产精品剧情 | 久久99精品波多结衣一区 | 国产精品久久久久久久久久久免费看 | 国产xxxxx在线观看 | 中文字幕乱码一区二区 | 最近免费中文字幕大全高清10 | 婷婷色综合网 | 69夜色精品国产69乱 | 天天操操 | 国产精品观看视频 | 国产玖玖精品视频 | 国产成人精品一区二区在线 | 精品一区二区三区在线播放 | 在线岛国av | 网址你懂的在线观看 | 精品天堂av | 欧美成a人片在线观看久 | 久久婷婷视频 | 国产999精品久久久影片官网 | 国产手机视频精品 | 久久视频免费观看 | 亚洲黄色在线看 | 四虎国产永久在线精品 | 婷婷av网 | 色婷婷色 | 日韩一级理论片 | 一本一本久久a久久精品综合小说 | 久久精品欧美一区 | 91在线观看视频网站 | 91精选在线观看 | 欧美在线视频免费 | 一区三区视频 | 久久午夜电影网 | 97人人澡人人爽人人模亚洲 | 国产精品九九久久99视频 | 黄色一级大片免费看 | 成人免费一级 | 色综合在| 欧美日韩在线视频一区二区 | 日批视频在线观看免费 | 国产成人精品网站 | 97国产大学生情侣白嫩酒店 | 又粗又长又大又爽又黄少妇毛片 | 91精品国产麻豆国产自产影视 | 久久综合成人 | 色在线中文字幕 | 久久激情精品 | 精品久久久久久亚洲 | 人人视频网站 | 色噜噜日韩精品一区二区三区视频 | 天天操综合 | 狠狠色噜噜狠狠狠狠 | 91亚瑟视频 | 综合久久久久久久 | 国产一区二区视频在线播放 | 人人讲| 91麻豆精品国产91久久久无需广告 | 波多野结衣精品视频 | 色美女在线 | 久久综合婷婷国产二区高清 | 成人在线一区二区三区 | 久久久久女教师免费一区 | 激情综合电影网 | 国产精品视频永久免费播放 | 亚洲欧洲中文日韩久久av乱码 | 福利视频一区二区 | 欧美色图视频一区 | 成年人免费在线播放 | 黄色电影在线免费观看 | 亚洲人成人天堂h久久 | 欧美色图视频一区 | 婷婷九九| 日韩 在线观看 | 六月丁香综合网 | 日韩国产在线观看 | 99九九视频 | 国产精品99久久久久久久久久久久 | 国产精品一区二区久久国产 | 久草视频首页 | 人人爽人人爽人人爽 | 国产一区二区在线视频观看 | 园产精品久久久久久久7电影 | 日本特黄特色aaa大片免费 | 国产婷婷精品av在线 | 人人插人人艹 | 中文字幕在线视频免费播放 | 草草草影院 | 青青草国产在线 | 人人插人人 | 一本一本久久a久久精品综合妖精 | 黄色免费观看 | 久久看片 | 欧美激情视频免费看 | av片子在线观看 | 日韩欧美视频二区 | 日韩性久久 | 日产乱码一二三区别在线 | 国产又粗又猛又爽又黄的视频免费 | 久久avav| 久久免费视频这里只有精品 | 麻豆视传媒官网免费观看 | 日日麻批40分钟视频免费观看 | 久久精品一区二区三区四区 | 黄色www| 亚洲国产网址 | 久草视频免费观 | 久久精品99国产精品酒店日本 | 日韩精品专区 | 99这里有精品 | 成+人+色综合 | 日韩激情片在线观看 | 在线观看黄a| 六月婷婷久香在线视频 | 成人网大片| 93久久精品日日躁夜夜躁欧美 | av免费网站在线观看 | 91人人在线| 国产成人精品久久久久蜜臀 | 成人免费视频网站在线观看 | av福利网址导航大全 | 天天操天天射天天爱 | 国产精品系列在线播放 | 久草在线在线视频 | 成人在线视频论坛 | 欧美俄罗斯性视频 | 91av视频在线播放 | 精品国产午夜 | 成人国产网址 | www.天天操 | 日韩三级视频在线观看 | 99色精品视频 | 日韩久久午夜一级啪啪 | 狠狠色丁香九九婷婷综合五月 | 婷婷伊人五月天 | 夜色成人av | 天天色视频 | av电影免费看 | 国产日本在线观看 | 2019免费中文字幕 | 一本—道久久a久久精品蜜桃 | 欧美日韩伦理一区 | 日韩成人av在线 | 91看片在线免费观看 | 久久综合色播五月 | 亚洲第一区精品 | 五月天久久久久久 | 99久久精品免费看国产一区二区三区 | 亚洲精品2区 | 欧美 日韩 成人 | 免费黄色a网站 | 国产精品黄色 | 中文字幕在线免费97 | 免费看色的网站 | 久久精品99久久 | 97自拍超碰 | 最新av网址在线 | 久久草草热国产精品直播 | 97人人艹| 日日爽 | 久久成熟 | 国内精品久久久久影院男同志 | 欧美日韩国产在线 | 欧美巨乳网 | 午夜精品视频免费在线观看 | 中文字幕免费国产精品 | 国产精品毛片久久蜜 | 久久九九影视 | 狠狠网 | 日韩在线精品一区 | 在线视频 国产 日韩 | 国产精品永久在线 | 久久99久久99久久 | 久久 地址 | 国产在线综合视频 | 国产一级免费视频 | 亚洲欧美视频一区二区三区 | 欧美一级特黄aaaaaa大片在线观看 | 在线看国产精品 | 91精选| 永久免费精品视频网站 | 国产麻豆视频在线观看 | 亚洲综合欧美激情 | www.啪啪.com| 99久精品 | 999久久a精品合区久久久 | 久亚洲 | 91完整版在线观看 | 亚洲精品裸体 | 在线成人欧美 | 五月天婷婷免费视频 | 久草视频播放 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 黄网站色欧美视频 | 天天se天天cao天天干 | 亚洲精品18p| 国产成人777777| 久久国产精品久久精品 | 国产网红在线观看 | 久久人人爽人人爽 | 久久麻豆视频 | 六月久久婷婷 | 在线电影a| 91精品久久久久久综合五月天 | 国产一区二区在线影院 | 成人免费xxx在线观看 | 成人a在线| 中文字字幕在线 | 麻豆视频在线 | 精品国产一区二区三区久久影院 | 日韩中文字幕在线不卡 | 精品久久久久久国产91 | 天天玩天天操天天射 | 久久久国产在线视频 | av在线日韩| 夜夜操夜夜干 | 国产精品美女久久久久久久久久久 | 欧美另类交在线观看 | 亚洲精品免费播放 | 九九影视理伦片 | 亚洲精品美女久久久久网站 | 人人添人人澡 | 亚洲成人午夜av | 亚洲精品乱码久久久久久蜜桃不爽 | 久久亚洲欧美日韩精品专区 | 激情综合国产 | 超碰97国产在线 | 久久久www免费电影网 | 九九九免费视频 | 最近中文字幕大全中文字幕免费 | 欧美成天堂网地址 | 欧美日韩一区二区免费在线观看 | 国产区久久 | 亚洲天堂香蕉 | 欧美国产日韩一区 | 狠狠狠色丁香综合久久天下网 | 久久久久久蜜桃一区二区 | 国产精品99久久久久久小说 | 日韩电影在线观看一区二区三区 | 99精品国产99久久久久久福利 | 免费黄色a级毛片 | 日本精品午夜 | 国产91勾搭技师精品 | www.黄色在线 | 99久久99视频只有精品 | 国产一区免费在线观看 | 久久草在线精品 | 日韩美女一级片 | 一级性生活片 | 中文字幕丝袜制服 | 日本性久久 | 天天干国产 | 91精品在线免费 | 国产一级高清 | 亚洲黄色成人av | 最新极品jizzhd欧美 | 在线视频中文字幕一区 | 91欧美日韩国产 | 日韩视频免费观看高清 | 国产日韩欧美视频在线观看 | 亚洲涩涩涩 | 91精品国产91久久久久福利 | 精品亚洲视频在线观看 | av在线免费在线 | 日韩久久久久久久久 | 国产在线精品一区二区 | 亚洲精品视频在 | www.久久91 | 免费在线观看视频一区 | 国内视频一区二区 | 久青草电影 | 亚洲午夜精品在线观看 | 欧美日韩免费观看一区二区三区 | 国产精品亚洲片在线播放 | 久草久热| 超碰在线94 | 偷拍精偷拍精品欧洲亚洲网站 | 欧美性春潮 | 精品久久久久久亚洲 | 2019中文字幕网站 | 丁香午夜 | 久久草视频 | 精品亚洲一区二区 | 亚洲视频一区二区三区在线观看 | 欧美激情精品久久久久久 | 日韩毛片久久久 | 国产精品久久视频 | 午夜视频在线网站 | 久久综合久久久 | 日韩免费观看av | 日韩精品一区不卡 | 亚洲视频电影在线 | 91人网站| 亚洲精品五月 | 国产精品com | 欧美极品一区二区三区 | 成人黄色中文字幕 | 蜜桃av久久久亚洲精品 | 天天爽夜夜爽精品视频婷婷 | 一区二区视频在线看 | av大全免费在线观看 | 日韩色综合| 国产麻豆电影在线观看 | 国产黄色一级片在线 | 亚洲精品乱码久久久久久久久久 | 狠狠操狠狠干天天操 | 免费av小说 | 欧美日韩电影在线播放 | 色婷婷97| 国产一区国产精品 | 久久免费一 | 五月激情天 | 91久久久久久久 | 在线观看黄色大片 | 高清av在线免费观看 | 亚洲最大av | 91人人人 | 激情伊人| 久久综合操 | 免费av网址大全 | 日韩免费av在线 | 99精品在线免费在线观看 | 国产精品美女在线 | 99电影456麻豆 | 曰本免费av | 在线观看精品一区 | 久久久 精品 | 黄免费网站 | 丁香久久久 | 996久久国产精品线观看 | 99视频在线观看免费 | av网址最新 | 人人爽人人爽人人爽人人爽 | 亚洲午夜精品福利 | 免费美女久久99 | 亚洲精品麻豆 | 一区二区精品 | 久99视频| 九九视频精品在线 | 五月综合激情婷婷 | 黄色一区三区 | 久草视频观看 | 亚洲欧洲久久久 | 9999毛片 | 婷婷资源站 | 99视频在线免费看 | 日韩 国产 | 成人国产电影在线观看 | 国产麻豆精品传媒av国产下载 | 日日躁夜夜躁xxxxaaaa | 四虎影视精品成人 | 最新av在线网站 | 激情欧美一区二区三区免费看 | 精品国产免费久久 | 黄色成人av| 中文字幕在线看视频国产中文版 | 狠狠干狠狠操 | 色综合人人 | 青青草久草在线 | 欧美激情在线网站 | 亚洲综合视频在线播放 | 欧美日韩中文国产一区发布 | 99热99热 | 久久久久久久久久福利 | 国产一级免费视频 | 视频国产在线 | 天天射天天爽 | 国产91精品久久久久 | 亚洲国产精品日韩 | 果冻av在线 | a黄色片在线观看 | 青青草国产成人99久久 | 精品美女国产在线 | 综合久久久久久久久 | 日韩精品久久久 | 中文字幕永久免费 | 天天操天天爱天天爽 | 久久精品亚洲综合专区 | 色视频网站在线 | 中文字幕黄网 | 午夜精品久久久久久久99 | 国产涩涩网站 | 中国一级特黄毛片大片久久 | 中文字幕日韩在线播放 | 国产成人精品一区二区三区网站观看 | 成人免费一区二区三区在线观看 | 人人爽人人爽人人爽学生一级 | 精品在线不卡 | 一区二区精品在线 | 国产在线观看,日本 | 中文字幕免费看 | 夜夜操网站 | 国产不卡av在线播放 | 99热在线国产 | 欧美va日韩va | 天天天天射 | 日韩激情片在线观看 | 国产高清一区二区 | av高清免费在线 | 午夜精品久久久久 | 91爱爱免费观看 | 欧洲亚洲激情 | 欧美久久久久久久久久 | 亚洲精品国产精品国自产观看 | 最近日本字幕mv免费观看在线 | 又黄又爽又色无遮挡免费 | 97超碰人人爱 | 草久在线观看 | 成年人视频在线观看免费 | 亚洲国产精品va在线看黑人动漫 | 狠狠干狠狠色 | 天天操天天摸天天干 | 日韩大片在线免费观看 | 日韩免费一区 | 亚洲人片在线观看 | 欧美一级片在线观看视频 | 丁香婷婷射 | 激情久久伊人 | 久久不见久久见免费影院 | 欧美动漫一区二区三区 | 久久久久久蜜桃一区二区 | 国产伦精品一区二区三区免费 | 国产一级在线视频 | 国产二区视频在线 | 久久精品视频播放 | 成人黄色片免费 | 国产日韩欧美在线观看视频 | 亚洲视频专区在线 | a黄色一级片| 麻豆国产精品一区二区三区 | 黄色免费观看 | 在线看成人av | www色片| 久久99精品国产麻豆宅宅 | 国产精品毛片一区 | 久久97超碰| 国产女v资源在线观看 | 亚洲天堂色婷婷 | 免费麻豆视频 | 四虎国产精品免费 | 日韩精品一区二区在线 | 国产精品成久久久久 | 久久婷婷亚洲 | 免费高清影视 | 日韩高清免费在线观看 | 欧美aaa大片 | 久久久久国产成人免费精品免费 | 久在线观看视频 | 99人成在线观看视频 | 日韩videos高潮hd | 国产精品一区二区久久国产 | 日韩欧美一区二区在线观看 | 午夜精品视频在线 | 久久在线免费视频 | 日韩成人邪恶影片 | 中文字幕在线看片 | 国产精品九九久久久久久久 | 91av影视 | 999国内精品永久免费视频 | 欧美在线视频精品 | 国产自制av | 国产日韩在线一区 | 国产婷婷vvvv激情久 | 亚洲国产精品va在线看 | 欧美电影黄色 | 91一区二区三区在线观看 | 韩国中文三级 | 美女视频黄免费网站 | 久久亚洲免费视频 | 视频在线观看99 | 伊人影院在线观看 | 欧美在线一二 | 91九色成人蝌蚪首页 | 免费av大全 | 黄色1级大片 | 国产高清视频免费观看 | 色婷婷婷| 字幕网资源站中文字幕 | 91在线精品观看 | 91视频高清免费 | 亚洲国产日韩一区 | av成人动漫在线观看 | 丁香色综合 | 日本中文字幕在线免费观看 | 成年人三级网站 | 欧美日高清视频 | 日本最新一区二区三区 | 国产三级精品三级在线观看 | 91av免费看| 久久人人艹| 久久久污 | 久久 一区| 成人av在线电影 | a一片一级 | 国产手机视频在线观看 | 国产区精品视频 | 福利电影久久 | 国产九色在线播放九色 | 国产一卡二卡在线 | 日本三级大片 | 国产在线观看你懂得 | 在线观看亚洲a | 亚洲午夜精品一区二区三区电影院 | 成人国产精品电影 | 久久视频这里有精品 | 久草9视频 | 久草在线高清视频 |