面試題數組篇(1)


前端面試中,數組是少不了的。因為數組使用度比較頻繁,我在項目中就經常使用。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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM