面試題數組篇(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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章