<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          如何快速的創建一個包含100個元素的數組

          時間:?2017-12-29閱讀:?914標簽:?Array
          ?本文為筆者原創,之后可能隨時修改,若需轉載請保留此頭部,以便讀者追本朔源。
          本文地址 : http://blog.zhukejin.com/archives/328

          如題, 最初見到的問題是如何創建100個為元素為0 的數組,研究了一系列的方法,包含Es6 新的API ,不得不說, ES6 好強大!

          如果問一個新手,那么得到的回答極有可能就是 循環,當然循環也無可厚非,畢竟能實現就行,但是我們如果閑的話,還是可以探討一下到底有多少中方式可以解決這個問題  


          循環

          var arr = [];
          for (var i=0; i<99; i++) {
              arr.push(0)
          }
          //可以嗎? 當然可以。 或者使用其他的什么循環

          那么有其他方法嗎? 當然有。核心圍繞在 new Array() 上 


          Array構造器

          如上第一個循環的時候,就是用了 new Array(100) 這樣的構造器,但是這樣創建出來的數組只是一個 undefined x 100的集合

          Array(100) //[undefined × 100]
          

          ECMAScript-262 中對 Array.prototype.map 的方法描述有一句話

          callbackfn is called only for elements of the array which actually exist; it is not called for missing elements of the array.

          在為數組中每個元素執行callbackfn之前,會先判斷這個元素是否在數組中實際存在(actually exist),判斷的方法就是調用內部方法[[HasProperty]]。

          不過沒關系,我們可以進行一些簡單的處理


          split分割

          //創建一個100個元素的數組,此時不具有Array 的 prototype, 然后通過 join 和 split 來生成
          Array(100).join(0).split('')
          
          //或者
          '0'.repeat(100).split('')
          
          //或者
          (1 << 24).toString(2).replace(/\d/g, '0000').split('')
          
          //什么? 你說這些出來元素都是字符串?要Number ? 
          Array(100).join(0).split('').map(Number)


          Array.fill

          // Es6 的新方法 Array.prototype.fill
          Array(100).fill(0)
          
          //tip
          [].fill.call({length: 100}, 0)
          
          //這時候就可以用 Array.from 、 Array.prototype.slice.call 來轉換成數組了
          Array(100).fill(0).map(x=>x);


          Array.from + map

          //構造器創建的undefined 集合無法遍歷,那么就來轉換一下
          Array.from(Array(100)).map(x=>0)
          
          //或者
          Array.from({length: 100}).map(x=0)


          Array.from + mapFn (from 的第二個參數)

          Array.from({length:100}, x=>0)


          Array.apply + map

          Array.apply(null, Array(100)).map(x=>0)
          
          //或者
          Array.apply(null,{length:100}).map(x=0)


          類型化數組

          //它的元素默認初始化為0。
          new Int8Array(100);
          
          //甚至
          Array.prototype.slice.call(new Uint8Array(100))


          延伸一下,如果是求每個元素是他的下標 (部分來自知乎)

          Object.keys

          Object.keys(Array.apply(null,{length:100}));
          
          //筆者補充,其實可以這樣
          Object.keys(new Int8Array(100))
          
          //或者這樣
          Object.keys(String(Array(101)));
          
          //甚至這樣
          Object.keys('0'.repeat(100))


          Array.from + keys

          Array.from(Array(100).keys()) 


          Spread + keys

          [...Array(100).keys()]


          Array.from + Generator

          function* angry(i) {
            yield i;
            if (i < 99) { yield* angry(i + 1); }
          };
          Array.from(angry(0));


          變異遞歸

          (function(v,i){if(i>0)arguments.callee(v,i-1);v.push(i);return v})([],99);


          奇葩一點的方法:

          Number.prototype[Symbol.iterator] = function() {
              return {
                  v: 0,
                  e: this,
                  next() {
                      return {
                          value: this.v++,
                          done: this.v > this.e
                      }
                  }
              }
          }
          
          [...100]


          Y combinator (別問,知乎大神寫的)

          (function (excited) {
             return function (f) { 
                return f(f); 
             }(function (f) {
                return excited(function (x) { return (f(f))(x); });
             });
          })(function (excited) {
             return function(i) {
                 return (i < 0) ? [] : excited(i - 1).concat(i);
             }
          })(99);
          
          
          //換個裝逼點的es6 
          ((excited) => ((f) => f(f))((f) => excited((x) => (f(f))(x))))((excited) => (i) => (i<0 ? [] : excited(i-1).concat(i)))(99)


          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/297

          arguments轉化成Array數組的方法

          簡單說一下arguments,arguments 就是函數內一個內建對象,它包含函數接收到的所有變量;所以,在實際開發中,我們使用arguments可以很方便的獲取到所有的實參,并且也需要對其使用是寫數組的方法

          Array.prototype.slice.call()

          MDN中對于Array.prototype.slice.()的介紹中,提到了類數組對象。以下是原文:slice 方法可以用來將一個類數組(Array-like)對象/集合轉換成一個新數組。你只需將該方法綁定到這個對象上。 一個函數中的 arguments 就是一個類數組對象的例子。

          使用 Array.fill( ) 填充對象的問題

          當你想使用 Array.fill( ) 來填充一個全是空白對象的數組時需要特別注意。Array(length).fill({ }) 這樣填充創建的數組,里面每一項{ }都完全相同

          Array.from() 五個超好用的用途

          任何一種編程語言都具有超出基本用法的功能,它得益于成功的設計和試圖去解決廣泛問題。JavaScript 中有一個這樣的函數: Array.from:允許在 JavaScript 集合(如: 數組、類數組對象、或者是字符串

          es6之Array.from()方法

          Array.from()方法就是將一個類數組對象或者可遍歷對象轉換成一個真正的數組。==只要是部署了Iterator接口==的數據結構,Array.from都能將其轉為數組。

          Js Array對象常用方法

          不改變原數組:concat();join();slice();toString(),改變原數組:pop();push();reverse();shift();unshift();sort();splice(),array.concat(array)連接兩個或多個數組,返回被連接數組的一個副本

          Array.slice 8種不同用法

          在深入研究一些更高級的用法之前,讓我們看一下slice方法的基礎知識。如MDN文檔,slice 是數組上的一個方法,它最多有兩個參數,從該索引處開始提取原數組中的元素,如果該參數為負數,則表示從原數組中的倒數第幾個元素開始提取

          Array數組相關方法

          push向數組末尾添加元素;unshift向數組開頭增加元素;pop刪除數組末尾一項;shift刪除數組的第一項;join為數組添加指定的分隔符;slice找某一區域內的項,返回成新數組形式

          js數組的迭代

          js數組的迭代:forEach() 方法對數組的每個元素執行一次提供的函數。map() 方法創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果。filter() 方法創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。

          es6之Array.of()和Array.from()

          es6新增了二種方法:Array.of()和Array.from(),它們有什么用途呢?在平時的開發中能給我們帶來什么方便呢?本篇將從一個創建數組的小問題開始,逐步揭開它們的面紗。

          fly63.com版權所有,內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网