前端總結面試題(每日更新)第四天

已經連續更新了第四天了,但願各位大佬們,能夠給出寶貴的意見,順便給小弟點一讚👍。今天和你們嘮一下數組(Array)和字符串(String)的一些方法和屬性:
來吧既然走到了這裏,就歇歇腳吧算法

Array 數組

說實話看到數組這麼多的方法我就腦瓜子疼,唉沒辦法硬着頭皮上吧數組

  1. length 屬性:動態獲取數組的長度;
let a = [1,2,3]
console.log(a.length) // 3
複製代碼
  1. join() 將一個數組轉成字符串,返回一個字符串;
let a = [1,2,3]
console.log(a.join()) // 1,2,3

複製代碼
  1. reverse() 將數組中各元素顛倒順序;
let a = [1,2,3]
 console.log(a.reverse()) // [3, 2, 1]
 
複製代碼
  1. delete() 運算符 只能刪除數組元素的值,而所佔空間還在,總長度沒變(arr.length)
let a = [1,2,3];
delete a[1]; // a在索引1的位置再也不有元素
1 in a  // false 數組索引1並未在數組中定義
a.length //  3  delete操做並不影響數組長度

複製代碼
  1. shift() 刪除數組中的第一個元素,返回刪除的那個值,並將長度減一;
let a = [1,2,3]
a.shift()  //a變成了[2,3]  返回:1
let b = [[1,2],3,4] 
b.shift()  //b 變成了[3,4]  返回:[1,2]
複製代碼
  1. pop() 刪除數組中的最後一個元素,返回刪除的那個值,並將長度減一;
// 其實push和pop就是容許將數組當作棧來使用
let stack = [1,2,3]
stack.pop()  //  stack:[1,2] stack.length = 2 返回: 3
let stack1 = [1,2,[3,4]]
stack1.pop()  //stack1:[1,2]  stack1.length = 2 返回:[3,4]
複製代碼
  1. unshift() 往數組前面添加一個或多個數組元素,長度要改變,最後返回數組新的長度;
let a = [ ];
a.unshift(1);  //a:[1]  返回:1
a.unshift(2);  //a:[2,1]  返回:2

複製代碼
  1. push() 在數組的結尾添加一個或多個元素,長度要改變;
let stack = [ ]
stack.push(1,2)   // stack:[1,2]  返回:2
stack.push([4,5])  //stack:[1,2,[4,5]] 返回:3
複製代碼
  1. concat() 鏈接數組;
// Array.concat()方法建立並返回一個新數組 ,可是concat()不會扁平化數組
let a = [1,2,3];
a.concat(4.5)   // 返回 [1,2,3,4,5]
a.concat([4,5])  // 返回 [1,2,3,4,5]
a.concat([4,5],[6,7])  //返回[1,2,3,4,5,6,7]
a.concat(4,[5,[6,7]])  //返回[1,2,3,4,5,[6,7]]
複製代碼
  1. slice() 返回數組的一部分;
let a = [1,2,3,4,5]
a.slice(0,3)  // 返回:[1,2,3]
a.slice(3)  //返回[4,5]
a.slice(1.-1) //返回[2,3,4]   參數中的負數,表示相對於數組中最後一個元素的位置
a.slice(-3,-2) //返回 [3]
複製代碼
  1. sort() 對數組進行排序;Array.sort()方法將數組中的元素排序並返回排序後的數組。當不帶參數調用sort()時,數組元素以字母表排序(有必要的時候將臨時轉化爲字符創進行比較)
let a = new Array('sunday','apple','jiujiu')
a.sort()  //返回值['apple','jiujiu','sunday']<br>
//若是數組包含undefined元素,他們會被排到數組的尾部
let b = [33,4,111,222]
b.sort()  //[111,222,33,4]  得出的事字母表排序
b.sort( function (a,b) {  //數值順序:4,33,111,222
    return a-b;  //根據順序,返回負數,0,正數
})

其他建議你們看一下《JavaScript權威指南》
複製代碼
  1. splice() 插入、刪除或者替換數組的元素,splice()返回一個由刪除元素組成的數組,或者若是沒有刪除元素就返回一個空數組。
// 第一個參數指定了插入或刪除的起始位置,第二個參數指定了應該從數組刪除的元素個數,<br>
//若是省略第二個參數,從起點開始到數組結尾的全部元素都將被刪除。
let a = [1,2,3,4,5,6,7,8]
a.splice(4)   //返回[5,6,7,8]  a:[1,2,3,4]
a.splice(1,2)  //返回[2,3]  a:[1,4]
a.splice(1,1)  //返回[4] a:[4]
// splice()的前兩個參數指定了須要刪除的數組元素,緊隨其後的任意個數的參數指定了,須要插入到數組中的元素,從第一個參數指定的位置插入
let a = [1,2,3]
a.splice(2,2,'a','b')   //返回[]  a:[1,2,'a','b',3]

複製代碼
  1. toString() 將數組轉換成一個字符串;
[1,2,3].toString()   //  '1,2,3'
['a','b','c'].toString()   // 'a,b,c'
['a',[2,'c']].toString()   // 'a,2,c'
複製代碼
  1. forEach(),對數組每一項進行給定函數,和for循環相似
// 傳遞的函數爲forEach()的第一個參數,而後forEach()使用<br>//三個參數調用該函數:數組元素,元素索引和數組自己

let arr = [1,2,3,4,5,6] 
//計算數組元素的和值
let sum = 0;
arr.forEach(function(value) {
    sum += value
})
// sum的返回值爲21

// 爲每一個數組元素的值加1
arr.forEach(function(v,i,a) {
    a[i] = v+1
})
//數組返回值  [2,3,4,5,6,7]

/**
注意一下,forEach沒法在全部元素都傳遞給調用的函數以前終止遍歷,
其實就是說,forEach中沒有break語句,若是要提早終止,就在forEach()方法放在try塊中,並能拋出一個異常,拋出異常,循環會提早終止
 */
 function foreach(a,f,t) {
     try{
         a.forEach(f,t);
     }catch (e) {
         if(e === foreach.break) return;
         else throw e
     }
 }
 foreach.break = new Error('StopIterration');

複製代碼
  1. map() 對數組中每一項進行給定函數,返回每次函數調用的結果組成新的數組。
// callback:必須的參數,對數組每一項要執行的函數
// thisArg:可選,規定callback回調函數this所指向的對象。
let arr = [1,2,3,4,5,6]
let mapArr = arr.map(function(item,index,array) {
    return item*2
})
// 返回值爲[2,4,6,8,10,12]

let arr = [1,2,3,4,5,6]
let obj = {num:2}
let mapArr = arr.map(function(item,index,array) {
    return item*this.num
},obj)
// 返回值爲[2,4,6,8,10,12]
複製代碼
  1. filter()方法返回的數組元素是調用的數組的一個子集。傳遞的函數是用來邏輯斷定的:該函數返回true和false,其實就是數組的過濾
let arr = [1,2,3,4,5,6,,7]
let newArr = arr.filter(function(x) { return x < 3 })  // [1,2]
複製代碼
  1. indexOf()和lastIndexOf()搜索整個數組中具備給定值得元素,返回找到的第一個元素的索引或者若是沒有找到就返回-1.indexOf()從頭到尾搜索,而lastIndexOf()則反方向搜索。
let a = [1,2,3,1]
a.indexOf(1)  //返回索引 0   a[0]是1
a.lastIndexOf(1)  //返回索引 3   a[3]是1
a.indexOf(4)  //返回-1,沒有值爲4的元素
複製代碼
  1. 如何判斷數組
Array.isArray([])   //true
Array.isArray({})   //false

[] instanceof Array   // true
複製代碼
  1. ES6中的數組新方法find(),findIndex()
/**數組實例的`find`方法,用於找出第一個符合條件的數組
成員。它的參數是一個回調函數,全部數組成員依次執行該
回調函數,直到找出第一個返回值爲`true`的成員,
而後返回該成員。若是沒有符合條件的成員,則返回`undefined`。*/
[1, 4, -5, 10].find((n) => n < 0)   // -5
// findIndex()返回下標
[1,4,-5,10].findIndex(n) => n < 0)  // 下標爲2
複製代碼
  1. includes() 判斷數組中是否存在該元素,能夠替換 ES5 時代的 indexOf 判斷方式。
includes(value,start)
複製代碼
  • value:必需,要檢測的元素。
  • start:可選,規定填充開始位置,默認從索引0處開始。
let arr = ['a', 'b','c', 'd', NaN]
arr.includes('a') //true
arr.includes(NaN) //true
arr.indexOf(NaN) //-1
複製代碼
  1. fill() 用新元素替換掉數組內的元素,能夠指定替換下標範圍。
fill(value,start,end)
複製代碼
  • value:必需,用來進行填充的值。
  • start:可選,規定填充開始位置,默認從索引0處開始。
  • end:可選,規定填充結束位置,默認填充到數組結尾。
const arr = ['a', 'b', 'c', 'd']
console.log(arr.fill('ss', 1, 3))  // ["a", "ss", "ss", "d"]

const arr2 = ['a', 'b', 'c', 'd']
console.log(arr.fill('ss'))  // ["ss", "ss", "ss", "ss"]
複製代碼

來個算法摧殘一下本身吧

/* 
        在一個神話故事中,有一隻小兔住在一個周長爲一公里的 
        圓形神湖旁,A.B兩點把這個神湖分紅兩部分,已知小兔從B點出發,
        沿逆時針方向繞神湖作跳躍運動,它每跳8分之3公里休息一次,若是跳到A點正好休息,
        那麼就會通過特別通道AB滑倒B點,從B點繼續跳。
        它每通過一次特別通道,神湖半徑就擴大一倍,
        現知小兔共休息1000次,這時神湖周長是多少公里?(AB爲圓的直徑)*/
        //神湖周長
        var c = 1000;
        // 跳躍一次的距離
        var jump = 375;
        // 到A點休息時跳躍的次數
        var j = 0;
        // 跳躍1000次
        for (var i = 1; i <= 1000; i++) {
            // 跳躍到c/2
            if(jump * (i-j) % c == c/2) {
                // 周長加倍
                j = i;
                c *= 2;
            }
        }
        // 在控制檯打印周長
        console.log(c)   //128000
        
複製代碼
相關文章
相關標籤/搜索