陣列相關api常用的不多(es5/6/7新增部分,使用時需要注意相容性),也簡單易懂,但組合使用起來會很靈活,出題方式多,向面試者描述也很容易被理解。
如果能熟練應用,平時寫**的效率也能提高不少,經驗相對豐富的前端開發不可避免地會經常與資料打交道。總結起來就是很適合做面試題。。。
開始之前先推薦超實用的工具庫lodash,提供了很多實用的工具函式。
以下**使用es6語法,新版chrome瀏覽器可以直接執行,不需要babel編譯。
// 一、將字串反向 'abc123' => '321cba'
// 很多不熟悉陣列api的小夥伴會回答 for迴圈。。。迴圈當然是可以的,兩年前我也這麼回答。。
// 加分回答
'abc123'
.split(''
).reverse()
.join(''
)
// 二、打平巢狀陣列 [1, [2, [3], 4], 5] => [1, 2, 3, 4, 5]
// 我現場寫的**:
const arr =[1
,[2,
[3],
4],5
]function
flatten
(arr)
}return arr
}flatten
(arr)
// 偶然發現 arr.tostring() 或 arr.join() => '1,2,3,4,5'
// 於是可以寫的簡便些
const arr =[1
,[2,
[3],
4],5
]arr.
join()
.split
(',').
map(it =>
number
(it)
)// 網上搜了下,還可以這麼寫。。。
const arr =[1
,[2,
[3],
4],5
]json
.parse(`[
$]`)// 這個題面試官想考查的應該是遞迴和深度優先遍歷,上面第
二、三種回答只適合應付元素為數字的場景,第一種回答討巧避開了深度優先遍歷過程,直接在原陣列上修改,並不推薦。
// 如果要有較好適應性,還是寫遞迴吧。同時可以參考下 [underscore flatten]( 的實現。
// 三、列印陣列全排列
// [1,2,3] => [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
// 沒有明確的遍歷界限時都使用遞迴吧,實際應用場景,若非尾遞迴形式需要考慮是否可能棧溢位。
// 採用遞迴需要重點考慮引數及返回值的設定,本例使用有***的方式實現,這樣實現邏輯上比較好理解,只有當滿足條件時新增一條排列,遞迴中的返回值用起來總感覺頭暈。。
function
allrange
(arr, path, res)
arr.
foreach
((v, idx)
=>)}
var a =[1
,2,3
,4]const b =
allrange
(a,[
], b)
console.
log(b)
//----------------------20190204更新-------------------
// 感覺上述**不夠優雅,後來覺得reduce很強大,於是嘗試重寫一下
console.
log([1
,2,3
,4].
reduce
((sum, p)
=>)}
return rs
},))
// reduce 函式執行過程
+1[[
1]]+
2[[2
1][1
2]]+
3[[3
21][
231]
[213
][31
2][1
32][
123]
]+4// ...
// 四、尋找兩個有序陣列最小相同元素
const a =[1
,2,5
,9,10
]const b =[3
,4,6
,9,10
]function
findelement
(a, b)
else
if(a[i]
> b[j]
)else
if(a[i]
< b[j])}
return
null
}console.
log(
findelement
(a, b)
)// => 9
// 看到這個題目第一想法是 遍歷第乙個陣列,二分法查詢第二個。經面試官提醒,採用游標,更加簡單易懂。
// 五、有序二維陣列尋找某元素座標
const data =[[
1,2,
5,9,
10],[
12,22,
35,49,
51],[
61,62,
75,79,
81]]const len = data[0]
.length
function
findoffset
(e, a, b)
else
if(e > data[y]
[x])
else
}findoffset(75
,0, len * data.length -1)
// => [2, 2]
// 看到這個題目第一想法是打平陣列使用indexof得到下標,再根據data[0].length對映到二維陣列的座標,只需要幾行**就能解決。
// 本題考的是二分查詢,相對一維陣列,多了乙個通過偏移量對映座標的過程。
前端初探 JavaScript
如果說html 是乙個簡單的靜態網頁,就像人素顏一樣。css樣式會讓頁面更加酷炫,就像化上妝一樣,js讓頁面可以動態變化,給頁面新增了動畫效果,檢測訪客的瀏覽資訊。事件繫結有三種 第一種 在html 標籤中進行事件繫結 在頁面中 function tnbclick 第二種 物件.事件 fn 例如do...
有關回文數
回文數 回文數 是一種數字.如 98789,這個數字正讀是98789,倒讀也是98789,正讀倒讀一樣,所以這個數字 就是回文數.任意某乙個數通過以下方式相加也可得到 如 29 92 121 還有 194 491 685,586 685 1271,1271 1721 2992 不過很多數還沒有發現此...
有關階乘問題(AC數)
eddy是個acmer,他不僅喜歡做acm題,而且對於ranklist中每個人的ac數量也有一定的研究,他在無聊時經常在紙上把ranklist上每個人的ac題目的數量摘錄下來,然後從中選擇一部分人 或者全部 按照ac的數量分成兩組進行比較,他想使第一組中的最小ac數大於第二組中的最大ac數,但是這樣...