分享一些常用的數(shù)組方法:
壓平數(shù)組(Array.prototype.contact的妙用)
[].concat.apply([],[[1,2],3,[4,5,6]])
打印: [1, 2, 3, 4, 5, 6]
數(shù)組拍平與迭代器的運用
問題描述:編寫一個 JavaScript generator 函數(shù)馋缅,接受一個僅包含數(shù)字的 多維數(shù)組 帖池,返回一個迭代器,可以遍歷得到它拍平以后的結(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ù)列——解構與循環(huán)優(yōu)化遞歸算法)
問題描述: 有若干階樓梯,每一次爬一節(jié)或者兩節(jié)厨幻,問有多少種方法相嵌?
//采用動態(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ù)組下標的應用與理解)
問題:JavaScript 數(shù)組有空位的概念,也就數(shù)組的一個位置上沒有任何的值况脆。例如:
[ , , '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ù)劃分(解構與while)
問題描述:
完成一個函數(shù) partition饭宾,它接受一個數(shù)組作為參數(shù)。它會搬動數(shù)組中的元素格了,使得所有小于第一個項的元素都搬動到它的左邊看铆,所有大于第一個項的元素都搬動到右邊。例如:
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]] //解構賦值盛末,很常用
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++
}
}