天天看點

8種現代數組方法,每個開發人員都應該知道

8種現代數組方法,每個開發人員都應該知道

英文 | https://javascript.plainenglish.io/8-modern-array-methods-that-every-developer-should-know-416855e01757

翻譯 | 小愛

在用代碼執行數組操作時,你是否經想過,關于數組執行,有沒有更加簡單的辦法?

在JavaScript中,我們可以使用各種非常有用的數組方法。正确使用它們後,隻需幾行代碼,便可以幫助你實作你想要的效果。

在這裡,我研究了8種數組方法,與你一起來分享一下,希望這些方法可以大大減少你的工作量。

那讓我們現在開始吧。

1、Map

Map方法允許你使用指定的操作将現有數組轉換為新數組。

var numbers = [4, 9, 16, 25];
var x = numbers.map(v=> 2*v)
console.log(x)
console.log(numbers)      

該map方法将傳回一個新數組,并将其存儲在變量“ x”中。原始數組“數字”将保持不變。

上面的代碼輸出:

[8,18,32,50] // x
[4,9,16,25]  // numbers      

2、Find

這是另一個有用的功能。該find方法的作用是使我們能夠在數組中找到特定的對象。它的文法與map方法類似,除了我們必須根據某些特定的檢查傳回true或false之外。

第一次傳回true時,此方法就停止對數組進行循環疊代。

但需要注意的是,此方法隻能擷取查詢比對到的第一個元素,傳回一次,不能查詢所有查詢比對到的元素。

示例如下:

var data = [
  {item:'Coffee', price:10},
  {item:'Tea',price:12},
  {item:'Shirt',price:25},
  {item:'Pen',price:6},
  {item:'Shirt', price:10}
];
var searchEle=data.find(v => v.item=='Shirt')
console.log(searchEle)      

輸出:

{
  item:"Shirt",
  price:25
}      

如你所見,數組“ data”中有兩個對象,“ item”的值為“ Shirt”,但是,該.find()方法僅傳回了符合條件的第一個對象。

3、篩選數組

顧名思義,此方法使我們可以過濾數組。

與上述兩種方法一樣,此方法也不會更改原始數組。

在上一個示例中,我們将使用相同的“資料”數組,并将過濾出價格低于10的元素。

var data = [
  {item:'Coffee', price:10},
  {item:'Tea',price:12},
  {item:'Shirt',price:25},
  {item:'Pen',price:6},
  {item:'Shirt', price:10}
];
var filteredArr=data.filter(v => v.price>=10)
console.log(filteredArr)      

如果你看一下方法中的filter函數 ,你會發現我們正在檢查目前對象的'price'屬性的值是否大于等于10。

如果是這樣,則将元素添加到我們的“ filteredArr”數組中。

上面的代碼片段的輸出:

[
  {
    "item": "Coffee",
    "price": 10
  },
  {
    "item": "Tea",
    "price": 12
  },
  {
    "item": "Shirt",
    "price": 25
  },
  {
    "item": "Shirt",
    "price": 10
  }
]      

你可以做的另一件事是,将find( )方法來實作該方法的功能。但是,會有一個差別。

使用該find方法時,我們僅獲得與搜尋查詢比對的第一個元素,而使用該filter方法,我們将獲得與查詢比對的所有元素。

如果我們使用與示例相同的示例來更好地說明這一點find ,那麼,隻有這次我們将使用該filter 方法實作相同的目的。

var data = [
  {item:'Coffee', price:10},
  {item:'Tea',price:12},
  {item:'Shirt',price:25},
  {item:'Pen',price:6},
  {item:'Shirt', price:10}
];
var searchEle=data.filter(v => v.item=='Shirt')
console.log(searchEle)      

我們隻需要将'find'關鍵字與'filter'交換,其餘代碼保持不變。但是,輸出看起來會有所不同。

輸出結果如下:

[
  {
    "item": "Shirt",
    "price": 25
  },
  {
    "item": "Shirt",
    "price": 10
  }
]      

如前所述,與find 方法不同,過濾器将傳回函數傳回true的每個對象,并且不會在第一次停止。

4、forEach

此方法替代了for循環。

代替編寫整個循環語句,我們可以使用此方法來實作相同的效果。

但是,此方法不傳回數組,而隻是循環周遊它們。

var numbers = [4, 9, 16, 25];
numbers.forEach(v=> console.log(v))      

當你隻想循環周遊數組中的元素時,這是一個好方法。

但是,這不會阻止你執行其他操作,例如,根據某種條件将數組的值配置設定給其他數組。

var numbers = [4, 9, 16, 25];
var s=[];
numbers.forEach(
  v=> v%2==0 ? //checking for even numbers
  s.push(v*v): //adding their square to another array
  null)
console.log(s)      

但是,最好是使用filter方法來執行這些操作。

5、Every

此方法檢查數組中的每個項目均符合某些特定條件。此方法傳回布爾值而不是數組。

當你必須確定每個元素都具有某些特定的屬性或值時,這将很有用。

var data = [
{name:'Science', results:'passed'},
{name:'Maths',results:'failed'},
{name:'Computer',results:'passed'},
];
var finalResult=data.every(v => v.results=='passed')
console.log(finalResult) // => false      

例如,在上面的代碼段中,學生的考試結果存儲在數組“資料”中,要通過期末考試,他必須通過每門科目。

是以,我們使用了該every()方法來檢查他是否通過了所有學科。

你甚至可以檢查是否存在特定值,如下所示:

var data = [
{name:'Science', results:'passed'},
{name:'Maths',}, //here results is missing
{name:'Computer',results:'passed'},
];
var everyEle=data.every(v => v.results)
console.log(everyEle) // => false      

6、Some

如果我們要檢查某些要素是否滿足條件而不是每個要素,該怎麼辦?

這就是some 方法的來曆。

與every 方法一樣,此方法也傳回布爾值。但是,隻要至少一個元素滿足條件,它就會傳回true。

var data = [
{name:'Science', results:'passed'},
{name:'Maths',results:'failed'},
{name:'Computer',results:'passed'},
];
var finalResult=data.every(v => v.results=='passed')
console.log(finalResult) // => true      

7、includes

這是一種非常簡單的方法,用于檢查數組中是否包含特定元素。

值得一提的是,該includes方法也可用于String并提供相同的功能。

var numbers = [4, 9, 16, 25];
var s=numbers.includes(4)
console.log(s) // => true      

此方法還傳回true或false。

此外,你可以提供搜尋開始位置以及第二個參數。

var numbers = [4, 9, 16, 25];
var s=numbers.includes(4,2)//(element,starting index)
console.log(s) // => false      

8、reduce

與到目前為止我們讨論的方法相比,該方法相對複雜。

我們已經使用reduce 方法計算了“資料”數組中存在的元素的總價。

請注意,我們如何不聲明全局變量來保留總數,而是使用方法本身提供的變量。

var data = [
  {item:'Coffee', price:10},
  {item:'Tea',price:12},
  {item:'Shirt',price:25},
  {item:'Pen',price:6},
  {item:'Shirt', price:10}
];
var totalPrice=data.reduce((total,current) => {
  return current.price+total
},0)
console.log(totalPrice)      

對于初學者,此方法采用2個參數,而不是1個。

第一個參數是函數最後一次疊代的傳回值,而第二個參數是數組中實際的目前元素。

是以,“ total”(第一個參數)包含“ current.price”(即目前對象的價格值)和總計之和。

此“ total”值由函數傳回,并形成函數成為下一次疊代的第一個參數。

另外,請注意,我們在函數之後傳遞了另一個參數。這是預設值。我們希望'total'從0開始,是以将0作為第二個參數傳遞給該函數。

最後的想法

JavaScript在用戶端腳本語言中占有主導地位,盡管它是一種非常适合初學者的語言,但它已廣泛應用于不同領域。

JavaScript應用程式變得越來越複雜,該語言添加了功能并進行了自我更新以滿足需求。

必須學習最佳的現代實踐,以減少工作量并使用易讀和簡單的代碼建構重要的應用程式。

JavaScript提供了各種數組方法,旨在簡化與數組有關的操作。但是,重要的是要了解何時使用什麼數組,以及使用此數組的目的是什麼,解決什麼問題。

使用JavaScript提供的最佳功能并了解何時使用它們,還可以在技術面試中提供優于其他功能的優勢。

這個就是我們學習JavaScript的目的,在工作中解決問題,

最後,希望你喜歡這篇文章,也希望此文對你有所幫助,如果有什麼問題,歡迎在留言區跟我們一起探讨。

感謝你的閱讀,程式設計愉快!

學習更多技能

請點選下方公衆号

繼續閱讀