2012-02-08 19 views
1

我有以下腳本轉儲指定數組的內容在這個數組解析器中使用了哪些JavaScript技術?

function dump(obj) { 
      obj = obj || {}; 
      var result = []; 
      $.each(obj, function (key, value) { result.push('"' + key + '":"' + value + '"'); }); 
      return '{' + result.join(',') + '}'; 
     } 

...但我不知道這個故事的「陣列」功能。你能告訴我,我需要學習如何理解.each聲明中的內容嗎?

更新

下面e.values是什麼OBJ看起來像一個例子。

enter image description here

+0

只是FYI,這段代碼幾乎只是重新創建'JSON.stringify'。 – 2012-02-08 17:00:11

+1

您的函數的問題是Number和Boolean值將被包裝在引號中,這些引號將其類型有效地更改爲String。我推薦內置的'JSON.stringify()'函數。 – 2012-02-08 17:04:32

回答

2

這是使用jQuery的eachhttp://api.jquery.com/jQuery.each/來做迭代。這裏是你的dumpfunction會發生什麼:

function dump(obj) { 
    // If 'obj' is falsy then make 'obj' a new Object 
    obj = obj || {}; 

    // Create a new Array 
    var result = []; 

    // Loop over each property in 'obj' and add 
    // "key":"val" String to the 'result' Array, 
    $.each(obj, function (key, value) { result.push('"' + key + '":"' + value + '"'); }); 

    // Join the Array using "," as the delimiter and wrap 
    // this with { ... }. Example of arr.join(): 
    //  var arr = [1, 2, 3]; 
    //  console.log(arr.join(".")); // "1.2.3" 
    //  console.log(arr.join("|")); // "1|2|3" 
    return '{' + result.join(',') + '}'; 
} 

編輯 如果你需要獲得一個任意Object的鍵(一個或多個),可以使用:

function getKeys(obj) { 
    var keys = [], 
     i; 
    for (var i in obj) { 
     if (obj.hasOwnProperty(i)) { 
      keys.push(i); 
     } 
    } 
    return keys; 
} 

var keys = getKeys({key: "value"}); // ["key"] 

這裏有一個working example

你也可以看看Underscore.js的_.keys()

+0

謝謝!我會密切關注的。你能告訴我用其他方法來訪問obj的「關鍵」嗎?假設obj總是有一個長度? – LamonteCristo 2012-02-08 16:35:50

+1

很高興幫助:-)一個'Object'可能會有很多鍵;不只是一個。例如:'var o = {a:「b」,c:「d」}'。這個「Object」有兩個鍵:'a'和'c'。您可以通過幾種方式訪問​​這些鍵的值:'var val = o.a;'或'var key =「a」; var val = o [key]'。 – jabclab 2012-02-08 16:38:15

+0

當我嘗試'o [鍵]'我得到一個未定義的鍵。我用一個例子更新了這個問題。如何提取字符串'EntryCommentPublic1DropDown' – LamonteCristo 2012-02-08 16:45:46

1

基本上所有的代碼做的是創建對象的字符串版本。

演示:http://jsfiddle.net/GYJAT/


$.each的是一個jQuery函數,通過陣列去。

+0

這是一個「關聯數組」嗎?我想了解如何訪問數組的鍵。 – LamonteCristo 2012-02-08 16:29:02

+0

@ makerofthings7 Javascript實際上並沒有關聯數組。它是一個對象(不是數組),它可以更適當地被認爲是一個關鍵的價值存儲。數組本身是有序的,對象本質上是無序的。 – benekastah 2012-02-08 16:35:21

0

根據您留下的評論,您的主要問題似乎是如何獲取對象的按鍵。

首先,你的代碼示例中jQuery將自動爲您完成的每個功能的一部分:

$。每個(OBJ,功能(鍵,值)...

如果您需要自己做的,現代的瀏覽器的鍵的屬性:Object.keys(OBJ)

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys

隨着舊的瀏覽器,你需要使用一個for循環(注意HasOwnProperty測試):

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/HasOwnProperty#Example:_Iterating_over_the_properties_of_an_object

相關問題