JavaScript數組常用操作技巧總結_javascript技巧
本文實例總結了JavaScript陣列的常用操作技巧。分享給大家供大家參考。具體如下:
前言
相信大家都用慣了jquery或underscore等這些類別庫中常用的陣列相關的操作,如$.isArray,_.some,_.find等等方法。這裡無非是原生js的陣列操作多了一些包裝。
這裡主要匯總一下JavaScript數組操作的常用API。相信對大家解決程序問題很有幫助。
一、性質
JavaScript中的陣列是一種特殊的對象,用來表示偏移量的索引是該對象的屬性,索引可能是整數。然而,這些數字索引在內部被轉換為字串類型,這是因為JavaScript物件中的屬性名稱必須是字串。
二、操作
1 判斷陣列類型
var array1 = new Array(); // 建構子
// 注意:在IE6/7/8下是不支援Array.isArray方法的
alert(Array.isArray(array0));
// 考慮相容性,可使用
alert(array1 instanceof Array);
// 或
alert(Object.prototype.toString.call(array1) === '[object Array]');
2 陣列與字串
非常簡單:由陣列轉換為字串,使用join;由字串轉換為數組,使用split。
console.log(['Hello', 'World'].join(',')); // Hello,World
// split - 由字串轉換為數組,使用split
console.log('Hello World'.split(' ')); // ["Hello", "World"]
3 找元素
相信大家都常用字串型別indexOf,卻很少知道陣列的indexOf同樣可以用來找元素。
console.log(['abc', 'bcd', 'cde'].indexOf('bcd')); // 1
//
var objInArray = [
{
name: 'king',
pass: '123'
},
{
name: 'king1',
pass: '234'
}
];
console.log(objInArray.indexOf({
name: 'king',
pass: '123'
})); // -1
var elementOfArray = objInArray[0];
console.log(objInArray.indexOf(elementOfArray)); // 0
從以上可以看出,對於數組包含物件的這種數組,indexOf方法並非是經過深度比較來得到對應的查找結果,只是比較對應元素的引用。
4 陣列連接
使用concat,要注意,使用concat之後會產生一個新的陣列。
var array2 = [4, 5, 6];
var array3 = array1.concat(array2); // 實作陣列連線之後,會建立出新的陣列
console.log(array3);
5 類別列表操作
用於新增元素,可分別使用push和unshift,移除元素可分別使用pop和shift。
var array = [2, 3, 4, 5];
// 加到陣列尾
array.push(6);
console.log(array); // [2, 3, 4, 5, 6]
// 加到陣列頭部
array.unshift(1);
console.log(array); // [1, 2, 3, 4, 5, 6]
// 移除最後一個元素
var elementOfPop = array.pop();
console.log(elementOfPop); // 6
console.log(array); // [1, 2, 3, 4, 5]
// 移除第一個元素
var elementOfShift = array.shift();
console.log(elementOfShift); // 1
console.log(array); // [2, 3, 4, 5]
6 splice方法
主要兩個用途:
① 從陣列中間位置新增並刪除元素
② 從原有數組中,取得一個新數組
當然,兩個用途是一氣合成的,有些場景注重用途一,有些則注重用途二。
從陣列中間位置新增並移除元素,splice方法為陣列新增元素,需提供下列參數
① 起始索引(也就是你希望開始加入元素的地方)
② 需要刪除的元素的數量或是擷取的元素的個數(新增元素時此參數設定為0)
③ 想要加入進數組的元素
nums.splice(3, 0, 4, 5, 6);
console.log(nums); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
// 緊接著做刪除操作或提取新的陣列
var newnums = nums.splice(3, 4);
console.log(nums); // [1, 2, 3, 8, 9]
console.log(newnums); // [4, 5, 6, 7]
7 排序
主要介紹reverse和sort兩個方法。陣列反轉使用reverse,sort方法不僅可以用於簡單排序,也可以用於複雜排序。
var array = [1, 2, 3, 4, 5];
array.reverse();
console.log(array); // [5, 4, 3, 2, 1]
我們先將字串元素的陣列進行排序
var arrayOfNames = ["David", "Mike", "Cynthia", "Clayton", "Bryan", "Raymond"];
arrayOfNames.sort();
console.log(arrayOfNames); // ["Bryan", "Clayton", "Cynthia", "David", "Mike", "Raymond"]
我們將數字元素的陣列進行排序
var nums = [3, 1, 2, 100, 4, 200];
nums.sort();
console.log(nums); // [1, 100, 2, 200, 3, 4]
sort方法是按照字典順序對元素進行排序的,因此它假定元素都是字串類型,因此,即使元素是數字類型,也被認為是字串類型。這時,可以在呼叫方法時傳入一個大小比較函數,排序時,sort()方法將會根據該函數比較數組中兩個元素的大小,從而決定整個數組的順序。
return num1 > num2;
};
nums.sort(compare);
console.log(nums); // [1, 2, 3, 4, 100, 200]
var objInArray = [
{
name: 'king',
pass: '123',
index: 2
},
{
name: 'king1',
pass: '234',
index: 1
}
];
// 對陣列中的物件元素,依index進行升序
var compare = function(o1, o2) {
return o1.index > o2.index;
};
objInArray.sort(compare);
console.log(objInArray[0].index
8 迭代器方法
主要包含forEach和every、some和map、filter
forEach相信大家都會,主要介紹其他四種方法。
every方法接受一個傳回值為布林類型的函數,對數組中的每個元素使用該函數。如果對於所有的元素,則函數均傳回true,則該方法傳回true。
// 不產生新數組的迭代器方法
var isEven = function(num) {
return num % 2 === 0;
};
// 如果都是偶數,才回傳true
console.log(nums.every(isEven)); // true
some方法也接受一個傳回值為布林類型的函數,只要有一個元素使得函數傳回true,該方法就會傳回true。
var isEven = function(num) {
return num % 2 === 0;
};
var nums1 = [1, 2, 3, 4];
console.log(nums1.some(isEven)); // true
map和filter這兩個方法都可以產生新數組,map傳回的新數組是對原有元素應用某個函數所得到的結果。如:
return grade = 5;
}
var grades = [72, 65, 81, 92, 85];
var newGrades = grades.ma
filter方法和every方法很類似,傳入一個傳回值為布林類型的函數。和every()方法不同的是,當對數組中的所有元素應用該函數,結果均為true時,該方法並未傳回true,而是傳回一個新數組,該數組包含應用函數後結果為true的元素。
return num % 2 === 0;
};
var isOdd = function(num) {
return num % 2 !== 0;
};
var nums = [];
for (var i = 0; i nums[i] = i 1;
}
var evens = nums.filter(isEven);
console.log(evens); // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
var odds = nums.filter(isOdd);
console.log(odds); // [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
三、總結
以上還存在某些方法在低階瀏覽器不支援的問題,還需要再採用其他方法進行相容實作。
這些都是常見的可能大家不太容易想到的方法。大家不妨多留意一下。
希望本文所述對大家的javascript程式設計有所幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

使用foreach循環移除PHP數組中重複元素的方法如下:遍歷數組,若元素已存在且當前位置不是第一個出現的位置,則刪除它。舉例而言,若資料庫查詢結果有重複記錄,可使用此方法移除,得到不含重複記錄的結果。

C語言中,表示指針,儲存其他變數的位址;&表示位址運算符,傳回變數的記憶體位址。指針的使用技巧包括定義指針、解引用指針,需確保指針指向有效地址;地址運算符&的使用技巧包括取得變數地址,取得數組元素地址時返回數組第一元素地址。實戰案例說明了使用指標和位址運算子反轉字串。

PHP中深度複製數組的方法包括:使用json_decode和json_encode進行JSON編碼和解碼。使用array_map和clone進行深度複製鍵和值的副本。使用serialize和unserialize進行序列化和反序列化。

PHP數組鍵值翻轉方法效能比較顯示:array_flip()函數在大型數組(超過100萬個元素)下比for迴圈效能更優,耗時更短。手動翻轉鍵值的for迴圈方法耗時相對較長。

在PHP中執行陣列深度複製的最佳實踐是:使用json_decode(json_encode($arr))將陣列轉換為JSON字串,然後再轉換回陣列。使用unserialize(serialize($arr))將陣列序列化為字串,然後將其反序列化為新陣列。使用RecursiveIteratorIterator迭代器對多維數組進行遞歸遍歷。

多維數組排序可分為單列排序和嵌套排序。單列排序可使用array_multisort()函數依列排序;巢狀排序需要遞歸函數遍歷陣列並排序。實戰案例包括按產品名稱排序和按銷售量和價格複合排序。

PHP的array_group_by函數可依鍵或閉包函數將陣列中的元素分組,傳回關聯數組,其中鍵為組名,值是屬於該組的元素數組。

PHP數組合併去重演算法提供了平行的解決方案,將原始陣列分成小塊並行處理,主進程合併區塊的結果去重。演算法步驟:分割原始數組為均等分配的小塊。並行處理每個區塊去重。合併區塊結果並再次去重。
