欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript遍歷數(shù)組的三種方法map、forEach與filter實(shí)例詳解

 更新時(shí)間:2019年02月27日 14:27:14   作者:彭勝光  
這篇文章主要介紹了JavaScript遍歷數(shù)組的三種方法map、forEach與filter,結(jié)合實(shí)例形式詳細(xì)分析了javascript針對(duì)數(shù)組遍歷的map、forEach與filter三種方法相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了JavaScript遍歷數(shù)組的三種方法map、forEach與filter。分享給大家供大家參考,具體如下:

前言

近一段時(shí)間,因?yàn)轫?xiàng)目原因,會(huì)經(jīng)常在前端對(duì)數(shù)組進(jìn)行遍歷、處理,JS自帶的遍歷方法有很多種,往往不加留意,就可能導(dǎo)致知識(shí)混亂的現(xiàn)象,并且其中還存在一些坑。前端時(shí)間在ediary中總結(jié)了js原生自帶的常用的對(duì)數(shù)組遍歷處理的方法,分別為:map、forEach、filter,在講解知識(shí)點(diǎn)的同時(shí),會(huì)類(lèi)比相識(shí)的函數(shù)進(jìn)行對(duì)比,這樣會(huì)有助于思考方法的利與弊。

一、Js自帶的map()方法

1.方法概述

map()方法返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組

2.格式說(shuō)明

var newArray = ["1","2","3"].map(fucntion(e,i,arr){return parseInt(e,10)})

  • map中回調(diào)函數(shù)中的第一個(gè)參數(shù)為:當(dāng)前正在遍歷的元素
  • map中回調(diào)函數(shù)中的第二個(gè)參數(shù)為:當(dāng)前元素索引
  • map中回調(diào)函數(shù)中的第三個(gè)參數(shù)為:原數(shù)組本身

3.使用說(shuō)明

3.1 支持return返回值;

3.2 return是啥,相當(dāng)于把數(shù)組中的這一項(xiàng)變?yōu)樯叮ú⒉挥绊懺瓉?lái)的數(shù)組,只是相當(dāng)于把原數(shù)組克隆一份,把克隆的這一份數(shù)組中的對(duì)應(yīng)項(xiàng)改變了)

3.3 map只能對(duì)元素進(jìn)行加工處理,產(chǎn)生一個(gè)新的數(shù)組對(duì)象。而不能用它來(lái)進(jìn)行篩選(篩選用filter),為什么不能,看個(gè)例子就知道了:

4.例子

4.1 在字符串中使用

在一個(gè)String上使用map方法獲取字符串中每個(gè)字符所對(duì)應(yīng)的ASCII碼組成的數(shù)組

var map = Array.prototype.map
var a = map.call("Hello World", function(e){return e.charCodeAt(0);})
// a的值為[72,101,108,108,111,32,87,111,114,108,100]

5.易犯錯(cuò)的點(diǎn)

5.1 很多時(shí)候,map給回調(diào)函數(shù)傳的是一個(gè)值,但是也有可能傳2個(gè)、3個(gè)值,例如下面的例子

var map = Array.prototype.map
var a = map.call("Hello World", function(e){return e.charCodeAt(0);})
// a的值為[72,101,108,108,111,32,87,111,114,108,100]

為什么會(huì)這樣,因?yàn)閜arseInt就是一個(gè)函數(shù),它就是作為map的一個(gè)回調(diào)函數(shù),parseInt接收兩個(gè)參數(shù),一個(gè)是String,一個(gè)是進(jìn)制

上面的函數(shù)就可以化為:

["1","2","3"].map(parseInt(string, radix));

["1","2","3"].map(function(string, radix){return parseInt(string, radix)})
// 所以才返回結(jié)果為:[1, NaN, NaN]

6.與map相關(guān)

6.1 Map對(duì)象

es6提供一個(gè)對(duì)象Map,看看這個(gè)Map建的對(duì)象到底是啥東西

它是一個(gè)對(duì)象,size是它的屬性,里面的值封裝在[[Entries]]這個(gè)數(shù)組里面

myMap.set(1, "a"); // 相當(dāng)于java的map.put();
myMap.set(2, "b");
myMap.set(3, "c");
myMap.size();
myMap.get(1);
myMap.get(2);
myMap.get(3);

二、Js自帶的forEach()方法

1.方法概述

forEach()方法返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組

2.格式說(shuō)明

forEach方法中的function回調(diào)有三個(gè)參數(shù),

  • 第一個(gè)參數(shù)為:當(dāng)前正在遍歷的元素
  • 第二個(gè)參數(shù)為:當(dāng)前元素索引
  • 第三個(gè)參數(shù)為:原數(shù)組本身
[].forEach(function(value, index, array))

3.使用說(shuō)明

3.1 這個(gè)方法沒(méi)有返回值,僅僅是遍歷數(shù)組中的每一項(xiàng),不對(duì)原來(lái)數(shù)組進(jìn)行修改
但是可以自己通過(guò)數(shù)組索引來(lái)修改原來(lái)的數(shù)組

3.2 forEach()不能遍歷對(duì)象,可以使用for in

4.缺點(diǎn)

4.1 您不能使用break語(yǔ)句中斷循環(huán),也不能使用return語(yǔ)句返回到外層函數(shù)

4.2 ES5推出的,實(shí)際性能比f(wàn)or還弱

5.例子

5.1 通過(guò)數(shù)組索引改變?cè)瓟?shù)組

var obj = [1,2,3,4,5,6]
var res = obj.forEach(function(item, index, arr) {
  arr[index] = item * 10;
})
console.log(res); // --> undefined
console.log(obj); // --> [10,20,30,40,50,60]

5.2 如果數(shù)組在迭代的時(shí)候被修改,則當(dāng)前元素與前面的元素會(huì)跳過(guò)。因?yàn)?code>forEach()不會(huì)在迭代之前創(chuàng)建數(shù)組的副本

var words = ['1', '2', '3', '4'];
words.forEach(function(word) {
  console.log(word);
  if (word === '2') {
    words.shift();
  }
});
// 1
// 2
// 4

6. 與forEach相關(guān)

6.1 $.eachfor in

可遍歷數(shù)組,可遍歷對(duì)象

6.1.1遍歷數(shù)組

var arr = [1,2,3,4,5]
var res = $.each(arr, function(index, value){
  console.log(index, value);
})
console.log(res); // 返回值,被遍歷的函數(shù)

6.1.2遍歷對(duì)象

var obj = {name: "psg", age: 22, gender: "male"};
// for in 遍歷
for(var key in obj) {
  console.log(key, obj[key]);
}
// $.each 遍歷
$.each(obj, function(key, value) {
  console.log(key, value);
})

三、Js自帶的filter()方法

1.方法概述

filter()方法是對(duì)原數(shù)組進(jìn)行過(guò)濾篩選,產(chǎn)生一個(gè)新的數(shù)組對(duì)象

2.注意事項(xiàng)

2.1 filter()不會(huì)對(duì)空數(shù)組進(jìn)行檢測(cè)(如果對(duì)空數(shù)組進(jìn)行篩選,返回值位undefined)

2.2 filter()不會(huì)改變?cè)紨?shù)組

2.3 返回?cái)?shù)組,包含了符合條件的所有元素。如果沒(méi)有符合條件的元素則返回空數(shù)組

3.格式說(shuō)明

forEach方法中的function回調(diào)有三個(gè)參數(shù),

  • 第一個(gè)參數(shù)為:當(dāng)前正在遍歷的元素
  • 第二個(gè)參數(shù)為:當(dāng)前元素索引
  • 第三個(gè)參數(shù)為:原數(shù)組本身
[].filter(function(value, index, array), thisValue)

4.例子

4.1 在一個(gè)Array中,刪除偶數(shù),只保留奇數(shù)

var arr = [1, 2, 3, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function(x) {
  return x % 2 !== 0;
});
r; // [1,3,5,9,15]

4.2 把一個(gè)Array中的空字符串刪掉

var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function(e) {
  return s && s.trim(); // 注意:IE9一下的版本沒(méi)有trim()方法
});
r; // ['A', 'B', 'C']

4.3 巧妙去除Array的重復(fù)元素

var r, arr = ['A', 'B', 'C', 'D', 'B', 'A']
r = arr.filter(function(e, i, self) {
  return self.indexOf === i;
})
console.log(r); // --> ['A', 'B', 'C', 'D']

4.4 篩選素?cái)?shù)

function get_primes(arr) {
  var i;
  return arr.filter(function (element) {
    var flag = true;
    if (element < 2) {
      flag = false;
    } else {
      for (var i = 2; i < element; i++) {
        if (element % i == 0) {
          flag = false;
          break;
        }
      }
    }
    return flag;
  })
}

參考:

http://www.dbjr.com.cn/article/157032.htm
http://www.dbjr.com.cn/article/157040.htm
http://www.dbjr.com.cn/article/157052.htm
http://www.dbjr.com.cn/article/157053.htm

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

PS:這里再為大家推薦一款JS數(shù)組遍歷方式分析對(duì)比工具供大家參考:

在線JS常見(jiàn)遍歷方式性能分析比較工具http://tools.jb51.net/aideddesign/js_bianli

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS中常見(jiàn)的8種繼承方法總結(jié)

    JS中常見(jiàn)的8種繼承方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于JS中常見(jiàn)的8種繼承方法,在js中所有的引用類(lèi)型都繼承了Object,而繼承也是通過(guò)原型鏈實(shí)現(xiàn)的,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 微信小程序云函數(shù)使用mysql數(shù)據(jù)庫(kù)過(guò)程詳解

    微信小程序云函數(shù)使用mysql數(shù)據(jù)庫(kù)過(guò)程詳解

    這篇文章主要介紹了微信小程序云函數(shù)使用mysql數(shù)據(jù)庫(kù)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Paypal支付不完全指北

    Paypal支付不完全指北

    這篇文章主要介紹了Paypal支付不完全指北,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 同步異步動(dòng)態(tài)引入js文件的幾種方法總結(jié)

    同步異步動(dòng)態(tài)引入js文件的幾種方法總結(jié)

    下面小編就為大家?guī)?lái)一篇同步異步動(dòng)態(tài)引入js文件的幾種方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • JS ES6多行字符串與連接字符串的表示方法

    JS ES6多行字符串與連接字符串的表示方法

    這篇文章主要介紹了JS ES6多行字符串與連接字符串的表示方法,結(jié)合具體實(shí)例形式對(duì)比分析了ES6中的多行字符串與連接字符串的表示方法與相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • 詳解JavaScript常用的Hook腳本

    詳解JavaScript常用的Hook腳本

    這篇文章主要介紹了JavaScript常用的Hook腳本,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • webpack中splitChunks分包策略的實(shí)現(xiàn)

    webpack中splitChunks分包策略的實(shí)現(xiàn)

    splitChunks是 webpack 中用于分包的配置選項(xiàng)之一,本文主要介紹了webpack中splitChunks分包策略的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • JavaScript設(shè)計(jì)模式之單件模式介紹

    JavaScript設(shè)計(jì)模式之單件模式介紹

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式之單件模式介紹,單件模式,就是靜態(tài)化的訪問(wèn)中已經(jīng)實(shí)例化的對(duì)象,這個(gè)對(duì)象只能通過(guò)一個(gè)唯一的入口訪問(wèn),已經(jīng)實(shí)例或待實(shí)例化的對(duì)象,需要的朋友可以參考下
    2014-12-12
  • 通過(guò)微信公眾平臺(tái)獲取公眾號(hào)文章的方法示例

    通過(guò)微信公眾平臺(tái)獲取公眾號(hào)文章的方法示例

    這篇文章主要介紹了通過(guò)微信公眾平臺(tái)獲取公眾號(hào)文章的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • JavaScript 正則命名分組【推薦】

    JavaScript 正則命名分組【推薦】

    以往我們只是習(xí)慣于通過(guò)數(shù)組下標(biāo)來(lái)訪問(wèn)正則匹配到的分組,但分組達(dá)到4、5個(gè)時(shí),標(biāo)識(shí)起來(lái)就會(huì)非常麻煩。V8早已實(shí)現(xiàn)了正則命名分組提案,只是我們很少使用,本文將介紹JS的正則命名分組
    2018-06-06

最新評(píng)論