來挑戰下你的js基本功,原來以前認為的基礎紮實都是空中樓閣。由Array.from引申的知識點。包括數組排序,call,apply,bind。等等。

來源:互聯網
上載者:User

標籤:對象   迴圈   知識點   com   想法   通過   fill   style   並且   

 以前看過一句話基礎的不一定簡單,一直沒體會到,今天終於見識到了。反思了下自己之前的工作學習,一句話總結,很浮躁。不多說,來個小的例子挑戰下。
Array.from()。對你沒看錯,就是這個簡單的api,用來將有length屬性的資料結構轉換為數組,在轉換之前可以使用map對每一個產生的值做處理。看到這裡你可能一略而過,很簡單嗎?不就是轉換嗎?
那麼接下來我來引申幾個問題。
問題1:Array.from()的這個api相容性如何?你會看到ie不相容。如果你想用怎麼辦?看看polyfill實現吧。然後polyfill的實現是怎樣的過程呐?思路是怎樣的?裡邊又有哪些細節需要你注意呐?我總結下來的有
           1:判斷資料類型,我們看Array.from(param,fnc,thisArg)。我們自己來寫,我們是不是得首先判斷fnc是不是一個函數呐?用到了什麼呐?對object.prototype.call(fnc) === "[object,Function]";那麼這時候又有問題了如果我要判斷所有的資料類型呐?

   2:使用call。我們傳入的fnc。如何給她傳遞進去當前迴圈的item,index,arr,並且改變fnc中的this為thisArg,這時候用到了call。call不瞭解?可能你去看下call,發現還有apply,bind。是不是得對比下。然後再看看相容性?是不是會引申其他問題?

 問題2:Array.from能解決我們實際編程中什麼問題呐?基礎的將各種帶有length屬性的類型資料變為數組。這些類型包括哪些呐?set,map,arguments,nodeList, string,甚至{length: 5}。複雜的實現數組合并去重。怎樣去重呐?
   

function combine(){     let arr = [].concat.apply([], arguments);  //沒有去重複的新數組     return Array.from(new Set(arr));} var m = [1, 2, 2], n = [2,3,3]; console.log(combine(m,n)); 

這是es6中的去重的簡單實現。那麼我們要考慮他的效能問題了,時間複雜度,空間複雜度。還有哪些實現去重的方法呐?你是不是得總結下。權衡下執行需要的時間和空間,選擇合適的去重方法。
比如,利用一個新數組,或者一個新的對象,依次把每個元素加入到對應的新數組,新對象中。然後判斷indexOf(item) != -1加入。!obj[item] 。也可以利用filter。forEach.同樣通過indexOf實現。
還有一種靠源生實現的。基本的想法是,判斷當前一個和下一個,如果重複了,那麼忽略這個元素,取下一個元素,如果沒有重複的那麼添加到我們建立的新數組。show code

function qc(arr) {if (object.prototype.toString(arr) != ‘[object, Array]‘) {    throw newError(‘the qc need Array‘)}var newArr = []    for(let i=0,len=arr.length;i<len;i++){      for(let j=i+1;j<len;j++){            // 如果重複,則i向前推進,但不管重複項            if(arr[i]==arr[j]) j= ++i         }        // 將沒有重複項的推入到新數組        newArr.push(arr[i])    }    return newArr}

 

來挑戰下你的js基本功,原來以前認為的基礎紮實都是空中樓閣。由Array.from引申的知識點。包括數組排序,call,apply,bind。等等。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.