所謂數組就是值的有序集合,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
}
復制代碼sortvar arr = [4,3,6,5,7,2,1];
arr.sort();
arr.sort(
function(a,b){ //a-b升序
return a-b;
});
console.log(arr);
復制代碼數組去重
ES6 提供了新的數據結構 Setconst 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)以上就是自己總結的一些有關數組常問的問題,部分給出了答案!當然有一些不足和不完善之處,歡迎各位指出!
總結
以上是生活随笔為你收集整理的面试必问之【数组】篇的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。