理解数据对象,每个和grep

时间:2013-01-19 08:04:08

标签: jquery each

回答How to check if value exist in jQuery .data() function

(请不要将一堆数据值添加到表单对象的有效性,而不是我的决定)

我创建了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'

注意:如果我将对象包装在$(..)中,则它不起作用

已解决使用$ .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. 为什么我不能在返回的对象上运行each
  2. 我正在做的grep是什么(之前只使用过一次grep)
  3. 为什么grep
  4. 内没有控制台输出

1 个答案:

答案 0 :(得分: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;
},