簡體   English   中英

此數組解析器使用了哪些JavaScript技術?

[英]What javascript techniques are used in this array parser?

我有以下腳本可以轉儲給定數組的內容

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

...但是我不理解它的“數組”功能。 您能告訴我我需要學習什么才能理解.each語句中的內容嗎?

更新資料

下面的e.values是obj外觀的示例。

在此處輸入圖片說明

這對each http://api.jquery.com/jQuery.each/使用jQuery進行迭代。 這是您的dump function發生的事情:

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"]

這是一個有效的例子

您也可以看看Underscore.js_.keys()

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

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


$.each是遍歷數組的jQuery函數。

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

首先,在代碼示例中,jQuery作為每個函數的一部分自動為您完成:

$ .each(obj,函數(鍵,值)...

如果您需要自己進行操作,現代瀏覽器具有keys屬性:Object.keys(obj)

https://developer.mozilla.org/zh-CN/JavaScript/Reference/Global_Objects/Object/keys

對於較舊的瀏覽器,您需要使用for循環(請注意HasOwnProperty測試):

https://developer.mozilla.org/zh-CN/JavaScript/Reference/Global_Objects/Object/HasOwnProperty#Example:_Iterating_over_the_properties_of_an_object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM