国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js 你不知道的 Array

yintaolaowanzi / 1678人閱讀

摘要:刪除數組的第一個元素,返回值是刪除的元素對數組中的元素進行排序添加或刪除數組中的一個或多個元素。循環迭代方法對數組中的每一個元素調用參數中指定的過濾函數,并將對于過濾函數返回值為的那些數組元素集合為新的數組返回。

一、在類數組對象上復用通用的數組方法

類數組有:arguments, NodeList, 字符串

什么是類數組? 兩個條件

具有 length 屬性

length 屬性大于該對象的最大索引

比如:

  var arrayLike = { 0: "a", 1: "b", 2: "c", length: 3};
  var result = Array.prototype.map.call(arrayLike, function(s) {
    return s.toUpperCase();
  });//["A", "B", "C"]

幾乎所有的數組方法都是通用的(forEach,slice,map ...) 除了 concat。

因為 concat 在連接時,會檢查其參數的 [[Class]] 屬性。

一些方法,比如 join,僅僅讀取他們被調用的對象的長度和數值屬性。 另外,像 reverse 一樣,要求對象的數值屬性和長度屬性是可變的;因此,這些方法不能在像 String 這樣的對象上被調用,String不允許它的長度屬性和synthesized的數值屬性被設置。

  function namesColumn() {
    return ["Names"].concat(arguments);
  }
  namesColumn("alice", "arale");//["Names", {0: "alice", 1: "arale"}]

  //解決辦法:應先使用 slice 將 arguments 轉為數組
  function namesColumn() {
    return ["Names"].concat([].slice.call(arguments));
  }
二、數組優先使用 for 循環,而不是 for in 循環。

for in 更多的是用于 遍歷對象,但是 它也會去檢查 對象的原型。

如果瀏覽器支持 for of (ES6)的話,最好是使用它,它不會去遍歷原型。

三、迭代優于循環

一個原因是,迭代可以消除沒必要的 終止條件任何數組索引

比如:

  for (var i = 0; n = players.length; i < n; i++) {
    players[i].score++;
  }

  //使用迭代
  players.forEach(function(p){
    p.score++;
  });

例1: 對數組每一個元素操作后生成一個新的數組

  //獲得所有輸入框去除多余空格后的值
  var trimmed = input.map(function(s) {
    return s.trim()
  })

例2: 獲取價格在特定區間的列表

  listings.filter(function(listing) {
    return listing.price >= min && listing.price <= max
  })

當然這都是 ES5 的方法,我們也可以自己寫一個。

  function takeWhile(a, pred) {
    var result = []
    for (var i = 0; n = a.length; i < n; i++) {
      if (!pred(a[i], i)) {
       break
      }
      result[i] = a[i]
    }
    return result
  }

  var prefix = takeWhile([1, 2, 4, 8, 16, 32], function(n) {
    return n < 10
  }) // [1, 2, 4, 8]

把它加在 Array 上

  Array.prototype.takeWhile = function(pred) {
    var result = []
    for (var i = 0; n = this.length; i < n; i++) {
      if (!pred(this[i], i)) {
        break
      }
      result[i] = this[i]
    }
    return result
  }

  [1, 2, 4, 8, 16, 32].takeWhile(function(n) {
    return n < 10
  }) // [1, 2, 4, 8]

循環僅一點優于迭代: 控制流操作 如 break 和 continue

ES5 中 只有 some 和 every 可以提前終止循環, 但設計他們的本意不是用來提前終止循環。

// some 一旦回調產生了一個真值,則立即返回,不會執行其余的元素
[1, 10, 100].some(function(x) { return x > 5 }) //true
[1, 10, 100].some(function(x) { return x < 0 }) //false
// every 相反, 一旦產生假值,則立即返回,不會執行其余元素
[1, 2, 3, 4, 5].every(function(x) { return x > 0 }) //true
[1, 2, 3, 4, 5].every(function(x) { return x < 3 }) //false

這種行為可以用來實現 forEach 提前終止循環的變種時派上用場

  function takeWhile(a, pred) {
    var result = [];
    a.every(function(x, i) {
      if (!pred(x)) {
        return false //break
      }
      result[i] = x;
      return true; //continue
    })
    return result
  }
四、數組方法分類
1. Mutator 方法

這些方法可以改變數組自身

pop : 移除數組的最后一個元素,返回值是被刪除的元素。

push : 在數組的末尾添加一個或者多個元素,返回值是新的數組的長度。

reverse : 顛倒數組中元素的順序,原先第一個元素現在變成最后一個,同樣原先的最后一個元素變成了現在的第一個,也就是數組的索引發生了變化。

shift : 刪除數組的第一個元素,返回值是刪除的元素

sort : 對數組中的元素進行排序

splice : 添加或刪除數組中的一個或多個元素。

unshift : (將廢棄)添加一個或者多個元素在數組的開頭,返回值是新的數組的長度。

2. Accessor 方法

這些方法不改變數組自身

concat : 返回一個包含此數組和其他數組和/或值的結合的新數組

indexOf : 返回第一個與給定參數相等的數組元素的索引,沒有找到則返回-1

join : 將所有的數組元素連接成一個字符串

lastIndexOf : 返回在數組中搜索到的與給定參數相等的元素的最后(最大)索引

slice : 返回數組中的一段。

toString : 返回代表該數組及其元素的字符,重寫Object.toString 過程.

valueOf : 重寫Object.valueOf過程。

3. 循環(迭代) 方法

filter : 對數組中的每一個元素調用參數中指定的過濾函數,并將對于過濾函數返回值為true的那些數組元素集合為新的數組返回。

forEach : 對數組的每一個元素依次調用參數中指定的函數。

every : 如果數組中每一個元素都滿足參數中提供的測試函數,則返回真

map : 創建一個新數組,新數組中含有,分別對于原來數組的每一個元素調用一個給定函數的結果

some : 如果數組中至少有一個元素滿足參數函數的測試,則返回true。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85980.html

相關文章

  • 你不知道js技巧

    摘要:所謂的高級,其實就是講了一些我們平常用不到或許用了不知道,但是非常實在的東西。比如如果你想檢測里面的屬性值的話,基本上是不可能的。要知道,我們是有情懷的淫。 JS進階 說起這個應該算是老生常談了吧。所謂的高級,其實就是講了一些我們平常用不到(或許用了不知道),但是非常實在的東西。算是熟練掌握js的一個必經road吧。 檢測函數類型 其實檢測函數的類型應該算是js的一個痛點,因為js是一...

    edagarli 評論0 收藏0
  • 【讀書筆記】你不知道JavaScript--內置類型

    摘要:有種內置類型,分別是除對象之外,其他統稱為基本類型。另一個需要注意的是數組確切地說,數組也是的一個子類型我們可以通過下面的方法檢查變量是不是數組處理未聲明的變量時,會返回這是因為有一個特殊的安全防范機制。 js有7種內置類型,分別是undefined null boolean string number symbol object除對象之 Object 外,其他統稱為基本類型。符號 ...

    Integ 評論0 收藏0
  • 你不知道JavaScript

    摘要:第二章值的數組不需要預設數組大小,可以直接向數組添加任何類型的值,如果形成了稀疏數組,那么未賦值的部分將會是。某些不是數組的對象,如果其有屬性,就是類數組,例如元素列表,,通常用這個將其轉化為數組,而為我們提供了一種新途徑。 從名字上看可能會覺得JS應該和Java是有很緊密的聯系的吧,實際上它們是兩種完全不同的語言,JS是ECMAScript的瀏覽器規范,是一種弱類型的語言,不同于Ja...

    2i18ns 評論0 收藏0
  • 筆記-你不知道JS-對象

    摘要:內置對象,在中,它們實際上只是一些內置函數。這些內置函數可以當作構造函數,使用調用,產生新對象。在必要時語言會自動把字符串字面量轉換成一個對象,也就是說你并不需要顯式創建一個對象。屬性操作符要求屬性名滿足標識符的命名規范。 1 如何定義 // 聲明形式,大部分情況下使用聲明形式 let obj ={ a:2, b:3 }; // 構造形式 let obj= = new Obje...

    senntyou 評論0 收藏0
  • ES6和Babel你不知道事兒

    摘要:版本截圖當然,搜狗瀏覽器市場份額也不低,官方最新版本是,內核版本是,為之一驚。上面代碼的和分別是什么含義呢如果是下面的配置有何不可呢首先來明確一個概念是一系列的集合。比如做移動端開發不需要考慮之類的端產品線只考慮指定的瀏覽器等。 因babel的版本從5升級到6有很多改動,比如babel本身不再提供任何transform的工作,都需要借助插件來完成,本文的所有討論都是建立在babel 6...

    nidaye 評論0 收藏0

發表評論

0條評論

yintaolaowanzi

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<