從 前端算法 到 js深度學(xué)習(xí)

分享一些常用的數(shù)組方法:

壓平數(shù)組(Array.prototype.contact的妙用)

  [].concat.apply([],[[1,2],3,[4,5,6]])
  打印: [1, 2, 3, 4, 5, 6]

數(shù)組拍平與迭代器的運(yùn)用

問(wèn)題描述:編寫一個(gè) JavaScript generator 函數(shù),接受一個(gè)僅包含數(shù)字的 多維數(shù)組 ,返回一個(gè)迭代器,可以遍歷得到它拍平以后的結(jié)果。例如:

const numbers = flatten2([1, [[2], 3, 4], 5])
numbers.next().value // => 1
numbers.next().value // => 2
numbers.next().value // => 3
numbers.next().value // => 4
numbers.next().value // => 5

答案:

function *flatten2 (arr) {
  for(let a of arr) {
    Array.isArray(a) ? yield* flatten2(a) : yield a
  }
}

數(shù)組去重 (es6 set 用法)

[ ...new Set([1, 2, 3, 1, 5]) ]
或者
Array.from(new set([1, 2, 3, 1, 5]))

爬樓梯(斐波那契數(shù)列——解構(gòu)與循環(huán)優(yōu)化遞歸算法)

問(wèn)題描述: 有若干階樓梯,每一次爬一節(jié)或者兩節(jié),問(wèn)有多少種方法?

//采用動(dòng)態(tài)規(guī)劃方案 
function climb(n){
             if (n == 1)  return 1
             if (n == 2)  return 2
             let n1 = 1
             let n2 = 2
             for(var i = 3; i < n; i++){
                [n1, n2] = [n2, n1 + n2] 
             } 
             return n1 + n2
     }

//傳統(tǒng)遞歸
function fb(n){
            if(n == 1 || n == 2){ return n} 
            return fb(n-1) + fb(n - 2)
   }

數(shù)組空位填充(數(shù)組下標(biāo)的應(yīng)用與理解)

問(wèn)題:JavaScript 數(shù)組有空位的概念,也就數(shù)組的一個(gè)位置上沒有任何的值。例如:

[ , , 'Hello'] // => 0, 1 都是空位, 3 不是空位

要求: 把空位都填充為 'Hello’

let arr = [ , undefined, null , 'Hello']
  for(var i = 0; i < arr.length; i++){
      if(!(i in arr)){
          arr[i] = 'Hello'
        }
   }
 console.log(arr)

數(shù)組中的數(shù)據(jù)劃分(解構(gòu)與while)

問(wèn)題描述:
完成一個(gè)函數(shù) partition,它接受一個(gè)數(shù)組作為參數(shù)。它會(huì)搬動(dòng)數(shù)組中的元素,使得所有小于第一個(gè)項(xiàng)的元素都搬動(dòng)到它的左邊,所有大于第一個(gè)項(xiàng)的元素都搬動(dòng)到右邊。例如:

const arr = [3, 1, 6, 2, 4, 5]
partition(arr)
console.log(arr) // => [2, 1, 3, 6, 4, 5]

解析

const partition = (arr) => {
  const swap = (a, i, j) => [a[i], a[j]] = [a[j], a[i]]  //解構(gòu)賦值,很常用
  
  const v = arr[0]
  let i = 0
  let k = 1
  let j = arr.length - 1
  
  while(k <= j) {
    if(arr[k] < v) swap(arr, i++, k++)  
    else if(arr[k] > v) swap(arr, j--, k) 
    else k++
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 3,138評(píng)論 3 37
  • 第三章 類型、值和變量 1、存取字符串、數(shù)字或布爾值的屬性時(shí)創(chuàng)建的臨時(shí)對(duì)象稱做包裝對(duì)象,它只是偶爾用來(lái)區(qū)分字符串值...
    坤少卡卡閱讀 722評(píng)論 0 1
  • 數(shù)組是值的有序集合。每個(gè)值叫做一個(gè)元素,而每個(gè)元素在數(shù)組中有一個(gè)位置,以數(shù)字表示,稱為索引。 JavaScript...
    劼哥stone閱讀 1,251評(píng)論 6 20
  • 一、ES6簡(jiǎn)介 ? 歷時(shí)將近6年的時(shí)間來(lái)制定的新 ECMAScript 標(biāo)準(zhǔn) ECMAScript 6(亦稱 ...
    一歲一枯榮_閱讀 6,209評(píng)論 8 25
  • 特別說(shuō)明,為便于查閱,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS...
    殺破狼real閱讀 628評(píng)論 0 0

友情鏈接更多精彩內(nèi)容