簡體   English   中英

數組中的javascript原型循環

[英]javascript prototype loop for in array

我正在研究一個使用大量“javascript”的項目。 我有很多“ajax”調用,它總是返回“json”數組。 由於有用的原因,我創建了兩個Array對象的原型(“in_array”函數和“shuffle”函數)。

由於我做了原型,我的所有“for in”循環都被打破了(兩次顯示“未定義”......)我調查了谷歌和stackoverflow,我現在知道我的錯誤。 當然,如果我刪除我的原型,“undefined”就會消失。

但是,我沒有找到我所有的答案。

首先,我看到很多次,使用“for in”循環是不好的,為什么?

我在“PHP”或“蟒蛇”開發過,我愛“中”或“的foreach”循環。

其次,我得到了很多“for in”循環,所以我更喜歡改變我的原型,而不是改變我的循環。 將我的原型切換到正常函數並保持“for in”循環是否非常臟?

第三,我讀到JQuery可以糾正這個錯誤。 我的項目確實得到了JQuery,解決方案是什么(我只讀了JQuery可以糾正這個,而不是如何)。

謝謝,

編輯:我的原型代碼:

// FONCTIONS ARRAY
Array.prototype.shuffle = function () {
for (var i = this.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var tmp = this[i];
    this[i] = this[j];
    this[j] = tmp;
}

return this;
}

Array.prototype.in_array = function (needle) {
    for(var i = 0; i < this.length; i++) {
       if(this[i] == needle)
           return true;
    }
    return false;
}

這是地圖功能的樣子。 我把它寫在了我的頭頂,所以可能有錯誤。

function object_map(object, callback) {
    var key, ret = {};
    for (key in object) {
        if (Object.prototype.hasOwnProperty.call(object, key)) {
            ret[key] = callback(key, object[key]);
        }
    }
    return ret;
}

你的問題出現了:

  1. 因為你要向Array.prototype添加(可枚舉的)函數,這些函數會在你枚舉任何數組時出現。

  2. 因為你不應該使用for ... in來枚舉數組,僅用於枚舉對象鍵。

如果您知道自己在ES5瀏覽器上運行,則可以使用Object.defineProperty安全地向Array.prototype添加函數:

Object.defineProperty(Array.prototype, 'shuffle', {
    value: function() {
        ...
    }
});

默認為創建非可枚舉屬性。

暫無
暫無

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

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