前端面試中,數組是少不了的。因為數組使用度比較頻繁,我在項目中就經常使用。JavaScript拼接Html,數據結構計算,等等。
匯總一下面試中數組會問到的幾個問題,這個問題在面試經常被問到,但是一般同學都不太熟悉。不全面的大家可以留言補充。
1、數組有哪些方法,常用的有哪幾個
Array 對象屬性
屬性 | 描述 |
---|---|
constructor | 返回對創建此對象的數組函數的引用。 |
length | 設置或返回數組中元素的數目。 |
prototype | 使您有能力向對象添加屬性和方法。 |
Array 對象方法 (14個,前面9個都比較常用)
方法 | 描述 |
---|---|
concat() | 連接兩個或更多的數組,並返回結果。 |
join() | 把數組的所有元素放入一個字符串。元素通過指定的分隔符進行分隔。 |
pop() | 刪除並返回數組的最后一個元素 |
push() | 向數組的末尾添加一個或更多元素,並返回新的長度。 |
reverse() | 顛倒數組中元素的順序。 |
shift() | 刪除並返回數組的第一個元素 |
slice() | 從某個已有的數組返回選定的元素 |
sort() | 對數組的元素進行排序 |
splice() | 刪除元素,並向數組添加新元素。 |
toSource() | 返回該對象的源代碼。 |
toString() | 把數組轉換為字符串,並返回結果。 |
toLocaleString() | 把數組轉換為本地數組,並返回結果。 |
unshift() | 向數組的開頭添加一個或更多元素,並返回新的長度。 |
valueOf() | 返回數組對象的原始值 |
表格摘自w3school網站,點擊方法和屬性,可以鏈接到網站查看。
這些方法通過傳遞不同參數,可以達到意外的效果,請看第二個問題。
2、js中對數組的clone
clone即克隆,就是復制一個數組:
var ary = [1,2,3]; var ary1 = ary.concat(); // 第一種方法 var ary2 = ary.slice(0); // 第二種方法 var ary3 = ary; // 這個不是復制,這個是引用
這兩種方法復制的數組是一個新數組,原數組的值改變了,新數組不會受到影響。
3、 查找一個字符串中出現次數最多的字符,統計這個次數
第一種方法:
先說一下思路:先定義一個空對象,將字符串中的字符作為對象的屬性,就可以統計出次數了。然后找出對象中各個屬性的最大值。
// 字符串可以用單引號,也可以用雙引號 var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds'; var obj = {}; // 處理字符串字符,給對象做屬性用 for(var i=0;i<str.length;i++){ // 中括號調用,數組是下標,對象是屬性,obj.name 和 obj['name'] if(obj[str.charAt(i)]){ // 如果對象有這個屬性了,就給這個屬性值自增1 obj[str.charAt(i)]++; }else{ // 如果對象沒有這個屬性,就給這個屬性值設為1 obj[str.charAt(i)] = 1; } } // 找出對象屬性中最多次數 var times = 0; var value = ''; // for in 是另一種for循環,可以用於遍歷對象的屬性和方法 for(var i in obj){ if(obj[i]>times){ times = obj[i]; value = i; } } // 最多次數保存在times中了,字符保存在value中了
第二種方法:
先說一下思路:使用正則表達式,匹配字符串,同時計數。
var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds'; var obj = {}; str.replace(/(.)\1*/g,function(_,__){ if(obj[__]){ obj[__] += _.length; }else{ obj[__] = _.length; } }); var times = 0; var value = ''; for(var i in obj){ if(obj[i]>times){ times = obj[i]; value = i; } }
4、 編寫一個方法,去掉一個數組的重復元素
去掉重復記錄和上面的字符重復次數統計思路類似,代碼不重復了。
5、找出數組中最大值可以使用哪些方法
var ary = [1,25,16,32,43,26,13,28,19]; // 1、 for循環遍歷,比較low,就不寫了 // 2、 數組排序 ary.sort()[ary.length-1]; // 3、數組排序+截取 ary.sort().splice(-1)[0]; // 4、借用Math最大值方法 Math.max.apply(null,ary);