首頁 web前端 js教程 Javascript的陣列與字典用法與遍歷物件的屬性技巧_javascript技巧

Javascript的陣列與字典用法與遍歷物件的屬性技巧_javascript技巧

May 16, 2016 pm 05:48 PM
字典 物件 陣列 遍歷

Javascript 的陣列Array,既是一個數組,也是一個字典(Dictionary)。先舉例看看數組的用法。

複製程式碼 程式碼如下:

var a = new Array();


var a = new Array();
a [0] = "Acer";
a[1] = "Dell";
for (var i = 0; i alert(a[i]);
}
下面再看一下字典的用法。 複製程式碼

程式碼如下:


var computer_price = new Array(); ["Acer"] = 500;
computer_price["Dell"] = 600;
alert(computer_price["Acer"]);

我們甚至可以同樣像上面那樣歷一樣這個陣列(字典) 複製程式碼
程式碼如下:


for (var i in computer_price) {
alert(i ": " computer_price[i]);
}


這裡的i 即為字典的每個鍵值。輸出結果為:
Acer: 500
Dell: 600

另外 computer_price 是字典對象,而它的每個鍵值就是一個屬性。也就是說 Acer 是 computer_price 的性質。我們可以這樣使用它:
computer_price.Acer

再來看字典和陣列的簡化宣告方式。
var array = [1, 2, 3]; // 陣列
var array2 = { "Acer": 500, "Dell": 600 }; // 字典
alert(array2.Acer); // 500
這樣對字典的宣告是和前面的一樣的。在我們的例子中,Acer又是鍵值,也可是作為字典物件的屬性了。
下面再來看看如何對一個物件的屬性進行遍歷。我們可以用 for in 來遍歷物件的屬性。 複製程式碼
程式碼如下:


function Computer(brand, price) {this .brand = brand;
this.price = price;
}
var mycomputer = new Computer("Acer", 500);
for (var prop in mycomputer) {
alert( "computer[" prop "]=" mycomputer[prop]);
}


上面的程式碼中,Computer有兩個屬性,brand 和price.所以輸出結果為:
computer[brand]=Acer
computer[price]=500
上面的這種用法可以用來查看一個物件都有哪些屬性。當你已經知道Computer物件有brand屬性時,就可以用
mycomputer.brand
或 mycomputer[brand]
來取得屬性值了。
總結:Javascript中的陣列也可以用來做字典。字典的鍵值也是字典物件的屬性。對一個物件的屬性進行遍歷時,可以用for in。

數組遍歷與屬性
雖然在 JavaScript 中數組是是對象,但是沒有好的理由去使用 for in 循環 遍歷數組。
相反,有一些好的理由不去使用 for in 遍歷陣列。
注意: JavaScript 中陣列不是 關聯數組。
JavaScript 中只有物件 來管理鍵值的對應關係。但是關聯數組是保持順序的,而物件不是。
由於 for in 迴圈會列舉原型鏈上的所有屬性,唯一過濾這些屬性的方式是使用hasOwnProperty 函數,
因此會比普通的 for 迴圈慢上好多倍。
遍歷
為了達到遍歷數組的最佳效能,建議使用經典的 for 迴圈。 程式碼如下:


var list = [1, 2, 3, 4 5, ...... 100000000];
for(var i = 0, l = list.length; i console.log(list[i]);
}


上面程式碼有一個處理,就是透過l = list.length 來快取陣列的長度。
雖然 length 是陣列的屬性,但是在每次循環中存取它還是有效能開銷。
可能最新的 JavaScript 引擎在這點上做了優化,但是我們沒辦法保證自己的程式碼是否運行在這些最近的引擎之上。
實際上,不使用快取數組長度的方式比快取版本慢很多。
length 屬性
length 屬性的 getter 方式會簡單的傳回陣列的長度,而 setter 方式會截斷陣列。 程式碼如下:

var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo .length = 6;
foo; // [1, 2, 3]

譯者註:
在Firebug 中查看此時foo 的值是: [1, 2 , 3, undefined, undefined, undefined]
但是這個結果並不準確,如果你在Chrome 的控制台查看foo 的結果,你會發現是這樣的: [1, 2, 3]
因為在JavaScript 中undefined 是變數,注意變數不是關鍵字,因此上面兩個結果的意義是完全不相同的。
// 譯者註:為了驗證,我們來執行下面程式碼,看序號 5 是否存在於 foo 中。
5 in foo; // 不管在Firebug 或Chrome 都回傳false
foo[5] = undefined;
5 in foo; // 不管在Firebug 或Chrome 都回傳true
為length 設定一個更小的值會截斷數組,但是增加length 屬性值不會對數組產生影響。
結論
為了更好的效能,建議使用普通的 for 迴圈並快取數組的 length 屬性。
使用 for in 遍歷數組被認為是不好的程式碼習慣並傾向於產生錯誤和導致效能問題。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? 如何使用 foreach 迴圈移除 PHP 陣列中的重複元素? Apr 27, 2024 am 11:33 AM

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

PHP數組深度複製的藝術:使用不同方法完美複製 PHP數組深度複製的藝術:使用不同方法完美複製 May 01, 2024 pm 12:30 PM

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

PHP 陣列鍵值翻轉:不同方法的效能比較分析 PHP 陣列鍵值翻轉:不同方法的效能比較分析 May 03, 2024 pm 09:03 PM

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

如何將 MySQL 查詢結果陣列轉換為物件? 如何將 MySQL 查詢結果陣列轉換為物件? Apr 29, 2024 pm 01:09 PM

將MySQL查詢結果陣列轉換為物件的方法如下:建立一個空物件陣列。循環結果數組並為每一行建立一個新的物件。使用foreach迴圈將每一行的鍵值對賦給新物件的對應屬性。將新物件加入到物件數組中。關閉資料庫連線。

PHP數組多維排序實戰:從簡單到複雜場景 PHP數組多維排序實戰:從簡單到複雜場景 Apr 29, 2024 pm 09:12 PM

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

PHP 數組分組函數在資料整理的應用 PHP 數組分組函數在資料整理的應用 May 04, 2024 pm 01:03 PM

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

深度複製PHP數組的最佳實踐:探索高效的方法 深度複製PHP數組的最佳實踐:探索高效的方法 Apr 30, 2024 pm 03:42 PM

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

PHP 函數如何傳回物件? PHP 函數如何傳回物件? Apr 10, 2024 pm 03:18 PM

PHP函數可以透過使用return語句後接物件實例來傳回對象,從而將資料封裝到自訂結構中。語法:functionget_object():object{}。這允許創建具有自訂屬性和方法的對象,並以對象的形式處理資料。

See all articles