日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试必问之【数组】篇

發布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试必问之【数组】篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂數組就是值的有序集合,js數組元素可以是任意類型,并且是動態的,根據需要它們會增長或縮減,js數組是js對象的特殊形式,數組索引碰巧是整數的屬性名差不多

創建數組

  • 直接量的方式
  • new Array() //一個數值參數是指定長度 多個參數是顯示的指定元素
  • var a = new Array(); var a = new Array(10); //長度為10的數組 var a = new Array(10, 2, 'a', 'b'); // [10, 2, 'a', 'b'] 復制代碼

    數組常見方法

  • 添加和刪除
  • //shift unshift //pop push // splice() //俗稱數組萬能方法 插入,刪除和替換 復制代碼
  • 其他常用方法
  • //Array.join(); //String.split() 操作相反 //Array.reverse(); //改變了原數組 返回值也是翻轉后的數組 //Array.sort(); //改變了原數組 返回值也是翻轉后的數組 //Array.concat(); //不會改變原來的數組 //如果這些參數中的任何一個自身是數組, //則連接的是數組的元素,而非數組本身。但要注意,concat()不會遞歸扁平化數組的數組。 var a = [1, 2, 3]; a.concat(4, [5, [6, 7]]) //返回[1, 2, 3, 4, 5, [6, 7]]//Array.slice() //參數為開始和結束的位置,返回一個數組,不會改變原來的數組 復制代碼
  • es6中新增的數組方法
  • //forEach //注意forEach中不能使用break //map //返回一個映射的新數組 //filter //返回滿足條件形成的新數組 //every和some //返回 true或者false //reduce //使用指定的函數將數組元素進行組合,生成單個值 兩個參數 一個是化簡函數一個是初始值 其中初始值就是化簡函數第一次執行時的第二個參數y,如果沒有初始值,那么將使用數組的第一個元素當初始值 let arr = [2, 4, 6, 9] //數組求和 arr.reduce(function(x,y){ //化簡函數的參數: //toal必選 初始值或者化簡后的值, //currentValue必選 當前值, //currentIndex可選當前索引, //arr可選。當前元素所屬的數組對象。return x*y },1) //數組求積復制代碼

    判斷是否是一個數組

  • Array.isArray()
  • [] instanceof Array()
  • toString()
  • var isArray = function(o){return typeof o === "object" && Object.prototype.toString.call(o) === "[object Array]" } 復制代碼

    數組排序

  • 冒泡排序
  • function popSort(arr){for(var i = 0; i<arr.length-1; i++) {for(var j=0;j<arr.length-1-i;j++) {if(arr[j] > arr[j+1]) {let temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}return arr } 復制代碼
  • 選擇排序
  • function secSort(arr){for(var i = 0; i<arr.length; i++) {let min = arr[i];let minIndex = i;for(var j=i; j<arr.length; j++) {if(min > arr[j]) {min = arr[j]minIndex = j}}let temp = min;arr[minIndex] = arr[i]arr[i] = temp;}return arr } 復制代碼
  • sort
  • var arr = [4,3,6,5,7,2,1]; arr.sort(); arr.sort(function(a,b){ //a-b升序return a-b; }); console.log(arr); 復制代碼

    數組去重

  • ES6 提供了新的數據結構 Set
  • const s = new Set();[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));for (let i of s) {console.log(i); } // 2 3 5 4 復制代碼//去除數組的重復成員 let arr1 = [2,3,5,2,4,4,5] console.log([...new Set(arr1)]); //[ 2, 3, 5, 4 ] 復制代碼
  • 利用對象的屬性不能重復
  • let arr = [2,3,5,2,4,4,5] let obj = {}; for(let i = 0;i<arr.length;i++) {obj[arr[i]] = 1; } console.log(Object.keys(obj)) //[ '2', '3', '4', '5' ] 變成了字符串 復制代碼
  • 比較去重
  • let arr = [2,3,5,2,4,4,5] for(let i = 0;i<arr.length;i++) {for(let j = i+1;j<arr.length;j++) {if(arr[i] === arr[j]) {arr.splice(j,1)i--}} } console.log(arr) 復制代碼

    通過上面的第2個解法引發了思考,如果數組里面有對象呢,解決辦法就是在每一次遍歷前都需要判斷一下類型,如果是對象就單獨push進另一個數組里,然后通過解構或者concat重新結合成新數組需要特別說明的是 set非常強大,向 Set 加入值的時候,不會發生類型轉換,優先采用1和3, 2一般不用 用的話也需要特殊處理,補充 如果真想用的話,不用對obj了,特殊處理較為復雜,采用map吧

    let arr = [2,3,5,2,4,4,5] let map = new Map(); for(let i = 0;i<arr.length;i++) {map.set(arr[i],1) } console.log([...map.keys()]) //[ 2, 3, 5, 4 ] 復制代碼

    將類數組轉為數組

  • Array.from()
  • [...arr]
  • 補充 vue相關的

    vue中以下不能檢測到數據變化

  • this.arr[i] = 'xxx'
  • this.arr.length = 10 解決辦法:
  • this.arr.splice()
  • this.$set(this.arr,index,val)
  • 以上就是自己總結的一些有關數組常問的問題,部分給出了答案!當然有一些不足和不完善之處,歡迎各位指出!

    總結

    以上是生活随笔為你收集整理的面试必问之【数组】篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。