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

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

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

          JavaScript 中搜索數(shù)組元素的四種方法

          實(shí)際開(kāi)發(fā)當(dāng)中,我們經(jīng)常會(huì)遇到類似諸如下面的需求:

          1. 獲取滿足特定條件的數(shù)組中的所有項(xiàng)目
          2. 要檢查是否滿足條件?
          3. 檢查數(shù)組中是否有特定值?
          4. 在數(shù)組中找到指定值的索引?

          在本文中,我們將討論四種可用于搜索數(shù)組中項(xiàng)目的方法。這些方法是:

          1. filter
          2. find
          3. includes
          4. indexOf

          接下來(lái),我們就一起來(lái)看一下這四種方式

          Array.filter()

          我們可以使用 Array.filter() 方法在數(shù)組中查找滿足特定條件的元素。

          例如,如果我們要獲取大于10的數(shù)字?jǐn)?shù)組中的所有項(xiàng)目,則可以執(zhí)行以下操作:

          const array = [10, 11, 3, 20, 5];
          
          const greaterThanTen = array.filter(element => element > 10);
          
          console.log(greaterThanTen) //[11, 20]

          使用 array.filter() 方法的語(yǔ)法如下:

          let newArray = array.filter(callback);

          著這里:

          • newArray是返回的新數(shù)組
          • array 是我們要進(jìn)行查找的數(shù)組本身
          • callback 是應(yīng)用于數(shù)組每個(gè)元素的回調(diào)函數(shù)

          如果數(shù)組中沒(méi)有項(xiàng)目符合條件,則返回一個(gè)空數(shù)組。

          有時(shí),我們不需要滿足特定條件的所有元素。我們只需要一個(gè)符合條件的元素。在這種情況下,需要使用find()方法。

          Array.find()

          使用 Array.find()方法查找滿足特定條件的第一個(gè)元素。就像 filter 方法一樣,它以回調(diào)為參數(shù),并返回滿足回調(diào)條件的第一個(gè)元素。

          我們嘗試一下在上面的示例中對(duì)數(shù)組使用 find 方法。

          const array = [10, 11, 3, 20, 5];
          
          const greaterThanTen = array.find(element => element > 10);
          
          console.log(greaterThanTen)//11

          array.find() 的語(yǔ)法為

          let element = array.find(callback);

          callback 是在數(shù)組中的每個(gè)值上執(zhí)行的函數(shù),帶有三個(gè)參數(shù):

          • element -當(dāng)前被遍歷的元素(必填)
          • index -當(dāng)前遍歷的元素的索引/位置(可選)
          • array- 當(dāng)前數(shù)組(可選)

          但是請(qǐng)注意,如果數(shù)組中沒(méi)有項(xiàng)目符合條件,則返回 undefined。

          但是,如果想檢查某個(gè)元素是否在數(shù)組中怎么辦?

          Array.includes()

          includes() 方法確定數(shù)組是否包含某個(gè)值,并在適當(dāng)時(shí)返回 true 或 false。

          因此,在上面的示例中,如果我們要檢查20是否為數(shù)組中的元素之一,則可以執(zhí)行以下操作:

          const array = [10, 11, 3, 20, 5];
          
          const includesTwenty = array.includes(20);
          
          console.log(includesTwenty)//true

          你會(huì)注意到此方法與其他方法之間的區(qū)別。此方法接受值而不是回調(diào)作為參數(shù)。這是 include 方法的語(yǔ)法:

          const includesValue = array.includes(valueToFind, fromIndex)
          • valueToFind 是要在數(shù)組中檢查的值(必填)
          • fromIndex 是要開(kāi)始從中搜索元素的數(shù)組中的索引或位置(可選)

          要了解索引的概念,讓我們?cè)俅问褂蒙厦娴氖纠?/p>

          如果要檢查數(shù)組是否在第一個(gè)元素之外的其他位置包含10個(gè),可以執(zhí)行如下操作:

          const array = [10, 11, 3, 20, 5];
          
          const includesTenTwice = array.includes(10, 1);
          
          console.log(includesTenTwice)//false

          Array.indexOf()

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

          回到例子。讓我們找到數(shù)組中 3 的索引。

          const array = [10, 11, 3, 20, 5];
          
          const indexOfThree = array.indexOf(3);
          
          console.log(indexOfThree)//2

          其語(yǔ)法類似于該 includes 方法的語(yǔ)法。

          const indexOfElement = array.indexOf(element, fromIndex)
          • element 是要在數(shù)組中檢查的元素(必填),并且
          • fromIndex 是要從數(shù)組中搜索元素的啟始索引或位置(可選)

          請(qǐng)務(wù)必注意,includes 和 indexOf 方法都使用嚴(yán)格的相等性('===')搜索數(shù)組。如果值的類型不同(例如4和'4'),它們將分別返回 false 和 -1。

          總結(jié)

          使用這些數(shù)組方法,無(wú)需使用 for 循環(huán)即可搜索數(shù)組。根據(jù)您的需求,您可以決定哪種方法最適合您的用例。

          以下是何時(shí)使用每種方法的摘要:

          • 如果你想找到在符合特定條件的陣列中的所有項(xiàng)目,使用 filter。
          • 如果你想檢查是否至少有一個(gè)項(xiàng)目符合特定的條件,請(qǐng)使用 find。
          • 如果你想檢查一個(gè)數(shù)組包含一個(gè)特定的值,請(qǐng)使用 includes。
          • 如果要在數(shù)組中查找特定項(xiàng)目的索引,請(qǐng)使用indexOf 。

          我們?cè)谌粘i_(kāi)發(fā)中,常常有判斷某值的需求,今天我們總結(jié)一下常見(jiàn)的幾種用來(lái)判斷是否為數(shù)組的 JavaScript 方法。

          Array.isArray

          Array.isArray() 是ES5新增的方法,用于確定傳遞的值是否是一個(gè)數(shù)組,如果是數(shù)組,則返回 true,否則返回 false。

          let arr = [];
          console.log(Array.isArray(arr)); // true
          

          下面的函數(shù)調(diào)用都返回 true:

          Array.isArray([]);
          Array.isArray([1]);
          Array.isArray(new Array());
          Array.isArray(new Array("a", "b", "c", "d"));
          

          需要注意的一點(diǎn)是:其實(shí) Array.prototype 也是一個(gè)數(shù)組。

          Array.isArray(Array.prototype); // true
          

          下面的函數(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(new Uint8Array(32))
          Array.isArray({ __proto__: Array.prototype });
          

          兼容性如下圖:

          可以看到,新版的主流瀏覽器都是支持該方法的,可以放心使用。

          constructor

          Object 的每個(gè)實(shí)例都有構(gòu)造函數(shù) constructor,用于保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)

          let arr = [];
          console.log(arr.constructor === Array); // true
          

          需要注意的是,constructor 有被修改的風(fēng)險(xiǎn),判斷結(jié)果不一定準(zhǔn)確,比如:

          let arr = [1, 2, 3];
          arr.constructor = function () { }
          console.log(arr.constructor === Array); // false
          

          一般不推薦使用 constructor 來(lái)判斷是否為數(shù)組,我們只需要知道有這么一個(gè)方法就行。

          instanceof

          instanceof 運(yùn)算符用于檢測(cè)構(gòu)造函數(shù)的 prototype 屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象的原型鏈上。舉個(gè)例子:

          // 定義構(gòu)造函數(shù)
          function C() {}
          function D() {}
          
          var o = new C();
          
          o instanceof C; // true,因?yàn)?Object.getPrototypeOf(o) === C.prototype
          
          o instanceof D; // false,因?yàn)?D.prototype 不在 o 的原型鏈上
          
          o instanceof Object; // true,因?yàn)?Object.prototype.isPrototypeOf(o) 返回 true
          C.prototype instanceof Object; // true,同上
          
          

          用 instanceof 來(lái)判斷是否為數(shù)組的用法如下:

          let arr = [];
          console.log(arr instanceof Array); // true
          

          使用 instanceof 需要注意兩點(diǎn):

          • 構(gòu)造函數(shù)的 prototype 和 實(shí)例的原型鏈都有可能會(huì)改變,所以判斷出的結(jié)果不一定一成不變。
          • 在有 iframe 的頁(yè)面腳本中使用 instanceof,可能會(huì)得到錯(cuò)誤的結(jié)果,因?yàn)?iframe 擁有獨(dú)立的全局環(huán)境,不同的全局環(huán)境擁有不同的全局對(duì)象,從而擁有不同的內(nèi)置類型構(gòu)造函數(shù)。

          isPrototypeOf

          isPrototypeOf() 可以用于測(cè)試一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上。用法如下:

          function Foo() {}
          function Bar() {}
          function Baz() {}
          
          Bar.prototype = Object.create(Foo.prototype);
          Baz.prototype = Object.create(Bar.prototype);
          
          var baz = new Baz();
          
          console.log(Baz.prototype.isPrototypeOf(baz)); // true
          console.log(Bar.prototype.isPrototypeOf(baz)); // true
          console.log(Foo.prototype.isPrototypeOf(baz)); // true
          console.log(Object.prototype.isPrototypeOf(baz)); // true
          

          如果要用 isPrototypeOf 來(lái)判斷傳入?yún)?shù)是否為數(shù)組,可以這樣用:

          let arr = [];
          console.log(Array.prototype.isPrototypeOf(arr)); // true
          

          Object.prototype.toString

          每個(gè)對(duì)象都有一個(gè) toString() 方法,當(dāng)該對(duì)象被表示為一個(gè)文本值時(shí),或者一個(gè)對(duì)象以預(yù)期的字符串方式引用時(shí)自動(dòng)調(diào)用。

          默認(rèn)情況下,toString() 方法被每個(gè) Object 對(duì)象繼承。如果此方法在自定義對(duì)象中未被覆蓋,toString() 返回 "[object type]" 字符串,其中 type 是對(duì)象的類型。

          可以通過(guò) toString() 來(lái)獲取每個(gè)對(duì)象的類型。為了每個(gè)對(duì)象都能通過(guò) Object.prototype.toString() 來(lái)檢測(cè),需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式來(lái)調(diào)用,傳遞要檢查的對(duì)象作為第一個(gè)參數(shù),稱為 thisArg。用法如下:

          var toString = Object.prototype.toString;
          
          toString.call(new Date); // [object Date]
          toString.call(new String); // [object String]
          toString.call(Math); // [object Math]
          
          //Since JavaScript 1.8.5
          toString.call(undefined); // [object Undefined]
          toString.call(null); // [object Null]
          

          如果要用來(lái)判斷一個(gè)對(duì)象是否為數(shù)組,可這樣使用:

          let arr = [];
          console.log(Object.prototype.toString.call(arr) === "[object Array]"); // true
          

          兼容性如下:

          typeof

          說(shuō)到判斷類型,可能很多人都會(huì)想到 typeof 方法,我們這里來(lái)復(fù)習(xí)一下 typeof 相關(guān)內(nèi)容。

          typeof 操作符返回一個(gè)字符串,表示未經(jīng)計(jì)算的操作數(shù)的類型。

          console.log(typeof 42); // "number"
          console.log(typeof 'blubber'); // "string"
          console.log(typeof true); // "boolean"
          console.log(typeof undeclaredVariable); // "undefined"
          

          typeof 可能的返回值如下:

          通過(guò)上圖可以看到,數(shù)組對(duì)象屬于“其他任何對(duì)象”,所以數(shù)組對(duì)象的 typeof 返回值是 “object”:

          let arr = [];
          console.log(typeof arr); // "object"
          

          所以,我們要盡量避免使用 typeof。

          總結(jié)

          以上就是幾種用來(lái)判斷一個(gè)值是否為數(shù)組的幾種方法,當(dāng)然有好用的也有不好用的,但是不管怎樣,我們知道有這么回事總歸是好的。總結(jié)一下:

          • 最好用的方法是 Array.isArray,只是不支持 IE8 及以下。
          • 如果要考慮兼容性,則可以使用 Object.prototype.toString

          ~

          ~本文完,感謝閱讀!

          ~

          學(xué)習(xí)有趣的知識(shí),結(jié)識(shí)有趣的朋友,塑造有趣的靈魂!

          大家好,我是〖編程三昧〗的作者 隱逸王,我的公眾號(hào)是『編程三昧』,歡迎關(guān)注,希望大家多多指教!

          你來(lái),懷揣期望,我有墨香相迎! 你歸,無(wú)論得失,唯以余韻相贈(zèng)!

          知識(shí)與技能并重,內(nèi)力和外功兼修,理論和實(shí)踐兩手都要抓、兩手都要硬!

          avaScript 提供了一系列強(qiáng)大的數(shù)組方法,這些方法可以極大地簡(jiǎn)化數(shù)組的操作和處理。理解并掌握這些方法對(duì)任何JavaScript開(kāi)發(fā)者來(lái)說(shuō)都是至關(guān)重要的。

          數(shù)組方法可以分為幾類,包括添加和移除元素的方法、遍歷和變換的方法、查找和篩選的方法,以及其他雜項(xiàng)方法。添加和移除元素的方法如 .push() 和 .unshift(),分別用于在數(shù)組末尾和開(kāi)頭添加元素,而 .pop() 和 .shift() 則用于移除數(shù)組末尾和開(kāi)頭的元素。這些方法修改了原數(shù)組的長(zhǎng)度,并返回被移除的元素。

          遍歷和變換的方法如 .map() 和 .filter() 允許開(kāi)發(fā)者對(duì)數(shù)組中的每個(gè)元素進(jìn)行操作,并返回一個(gè)新的數(shù)組。.map() 方法對(duì)數(shù)組中的每個(gè)元素執(zhí)行給定的函數(shù),并返回包含結(jié)果的新數(shù)組,而 .filter() 則返回一個(gè)新的數(shù)組,包含所有通過(guò)指定函數(shù)測(cè)試的元素。

          查找和篩選的方法如 .includes() 和 .find() 提供了在數(shù)組中查找特定元素的能力。.includes() 檢查數(shù)組是否包含某個(gè)元素,并返回一個(gè)布爾值。.find() 返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的值,或者在沒(méi)有滿足測(cè)試函數(shù)的元素時(shí)返回 undefined。

          其他重要的數(shù)組方法還包括 .reverse()、.slice() 和 .splice()。.reverse() 顛倒數(shù)組中元素的順序。.slice() 返回一個(gè)新的數(shù)組對(duì)象,這一對(duì)象是原數(shù)組的一個(gè)淺拷貝,由開(kāi)始索引到結(jié)束索引(不包括結(jié)束索引)選擇的部分組成。.splice() 方法則可以添加或移除數(shù)組中的元素,并返回被移除的元素。


          js中數(shù)組方法

          總的來(lái)說(shuō),這些方法不僅可以極大地提高代碼的可讀性和維護(hù)性,還能使數(shù)組操作更加高效和簡(jiǎn)潔。無(wú)論是進(jìn)行簡(jiǎn)單的元素添加和移除,還是復(fù)雜的數(shù)據(jù)轉(zhuǎn)換和篩選,JavaScript 的數(shù)組方法都能提供強(qiáng)有力的支持。掌握這些方法將有助于開(kāi)發(fā)者在編寫(xiě)代碼時(shí)更加得心應(yīng)手,處理數(shù)組相關(guān)的任務(wù)也會(huì)變得更加輕松。


          主站蜘蛛池模板: 国产乱码伦精品一区二区三区麻豆| 末成年女A∨片一区二区| 精品少妇ay一区二区三区 | 亚洲熟女综合色一区二区三区| 日韩一区在线视频| 少妇激情AV一区二区三区| 一区二区三区免费电影| 国产福利在线观看一区二区| 在线播放一区二区| 亚洲AV综合色区无码一区| 国产精品福利一区| 国产日本亚洲一区二区三区| 日韩一区二区久久久久久| 国产成人精品一区二区秒拍| 伊人色综合一区二区三区| 国产乱码精品一区二区三区四川| 亚洲国产成人久久综合一区 | 2021国产精品视频一区| 日本精品高清一区二区| 国产精品区AV一区二区| 亚洲性日韩精品国产一区二区 | 成人免费区一区二区三区| 国产91精品一区二区麻豆亚洲| 日韩在线视频不卡一区二区三区| 一区二区和激情视频| 国产一国产一区秋霞在线观看| 国产在线精品一区在线观看| 人妻无码一区二区三区| 国产午夜精品一区二区| 一区二区视频在线| 无码少妇丰满熟妇一区二区| 国产一区二区福利久久| 免费av一区二区三区| 精品无人乱码一区二区三区| 精品一区二区三区中文| 亚洲熟女少妇一区二区| 日韩视频免费一区二区三区| 国产精品毛片a∨一区二区三区| 精品无码一区二区三区电影| 日本一区视频在线播放| 亚洲福利电影一区二区?|