2013-01-19 36 views
0

(上加入一些數據值到表單對象,而不是我的決定的合法性,請不downvotes)接聽How to check if value exist in jQuery .data() function瞭解數據對象,每個和grep

我創建了一個jsfiddle using each

這給

Object {v1: "value11", v2: "value2", v3: "value3", v4: "value4", v5: "value5"} fiddle.jshell.net:25 
Uncaught TypeError: Object #<Object> has no method 'each' 

注:如果我在包裹$對象(..)它不工作,要麼

解決使用$。每個jsfiddle using $.each

$(function() { 
    $("form[name=update]").data("values", {"v1": "value11", "v2": "value2", "v3": "value3", "v4": "value4", "v5": "value5"}); 
    $(".but").on("click",function(e) { 
    var $fData = $("form[name=update]").data("values"); 
    var val = $(this).val(); 
     console.log($fData); 
    $fData.each(function(n,i) { 
     console.log("!!!",n,i) 
     if (n[i]===val) { 
     alert("duplicate value"); 
     return false; 
     }  
    }) 
    e.preventDefault() 
    }); 
}); 

jsfiddle using grep這在任務完全失敗。

$(function() { 
    $("form[name=update]").data("values", {"v1": "value11", "v2": "value2", "v3": "value3", "v4": "value4", "v5": "value5"}); 
    $(".but").on("click",function() { 
    var $fData = $("form[name=update]").data("values"); 
    var val = $(this).val(); 
    var idx = $.grep($fData, function(n,i) { 
     console.log("n",n); // why no console output for this??? 
     return n[i]===val; 
    }); 
    console.log(idx); 
    if (idx!=-1) { 
     alert("duplicate value") 
    } 
    }); 
}); 

問題:

  1. 我爲什麼不能返回的對象
  2. 上運行each是什麼了與grep我做的(只用一次的grep之前)
  3. 爲什麼沒有控制檯輸出grep
+0

我認爲grep只適用於數字索引數組,而不是對象。 –

回答

4

$.each僅提供給jQuery的對象,所以你需要用你的對象:

$($fData).each(function (n, i) { 

或者將它傳遞給$.each

$.each($fdata, function(n, i) { 

至於$.grep(),問題是,你的輸入是對象,而不是數組。 $.grep有點默默地失敗你:

grep: function(elems, callback, inv) { 
    var retVal, 
     ret = [], 
     i = 0, 
     length = elems.length; // <-- Here's why 
    inv = !!inv; 

    // Go through the array, only saving the items 
    // that pass the validator function 
    for (; i < length; i++) { 
     retVal = !!callback(elems[ i ], i); 
     if (inv !== retVal) { 
      ret.push(elems[ i ]); 
     } 
    } 

    return ret; 
}, 
+0

DOH!回答#1 - 謝謝! – mplungjan

+0

啊哈 - 這很糟糕。我不喜歡沉默失敗! SO會讓我接受 – mplungjan