jQuery检查value是否在object中

时间:2016-04-21 01:54:15

标签: javascript jquery arrays

我有一个包含用户帐户和复选框的页面。在保存时,我需要将复选框的所有值添加到对象中,只要它们不存在。

当我使用关联数组时,我有这个工作,因为我当时只存储一个值。我现在将它存储为一个对象,我需要确保QID(这是唯一的)在对象中已经存在。

有一种优雅的方式可以解决这个问题吗?

> matrix(letters[1:10],2)
     [,1] [,2] [,3] [,4] [,5]
[1,] "a"  "c"  "e"  "g"  "i" 
[2,] "b"  "d"  "f"  "h"  "j" 

3 个答案:

答案 0 :(得分:1)

只需保留一个您添加ID的地图,这样就可以轻松有效地检查ID是否存在,无论数组中的数据结构如何

var selectedUsers = [];
var addedUsers    = {};

$(tab).find(".cb:checked").each(function() {

    var qid = this.value;

    if ( !(qid in addedUsers) ) {
       selectedUsers.push({
          qid   : qid,
          first : $(this).data('emp_first'),
          last  : $(this).data('emp_last'),
          department : $(this).data('emp_dept')
       });
       addedUsers[qid] = 'x';
    }
});

答案 1 :(得分:1)

创建一个通用查找函数,然后使用它:

  function lookup(myArray, searchTerm, property, firstOnly) {
    var found = [];
    for (var i = 0; i < myArray.length; i++) {
      if (myArray[i][property] === searchTerm) {
        found.push(myArray[i]);
        if (firstOnly) break; //if only the first 
      }
    }
    return found;
  }

使用它:

var existUser = lookup(selectedUsers,"qid",$(this).val(),true);
if(existUser && existUser.length){// it returned a match if len > 0
   push it here
}

如果有人已经进行了查找,那就有点冒险了,所以让我们用其他一些命名空间:(将myApp改为你的)

使用:

var existUser = myApp.arrayObj.lookup(selectedUsers,"qid",$(this).val(),true);

或使用contains:

var hasUser = myApp.arrayObj.contains(selectedUsers,"qid",$(this).val());

功能:

var myApp = myApp || {};
myApp.arrayObj = {
  indexOf: function(myArray, searchTerm, property) {
    for (var i = 0; i < myArray.length; i++) {
      if (myArray[i][property] === searchTerm) return i;
    }
    return -1;
  },
  indexAllOf: function(myArray, searchTerm, property) {
    var ai = [];
    for (var i = 0; i < myArray.length; i++) {
      if (myArray[i][property] === searchTerm) ai.push(i);
    }
    return ai;
  },
  lookup: function(myArray, searchTerm, property, firstOnly) {
    var found = [];
    for (var i = 0; i < myArray.length; i++) {
      if (myArray[i][property] === searchTerm) {
        found.push(myArray[i]);
        if (firstOnly) break; //if only the first 
      }
    }
    return found;
  },
  lookupAll: function(myArray, searchTerm, property) {
    return this.lookup(myArray, searchTerm, property, false);
  },
  remove: function(myArray, searchTerm, property, firstOnly) {
    for (var i = myArray.length - 1; i >= 0; i--) {
      if (myArray[i][property] === searchTerm) {
        myArray.splice(i, 1);
        if (firstOnly) break; //if only the first term has to be removed
      }
    }
  },
  contains: function(myArray, searchTerm, property){
      return this.indexOf(myArray, searchTerm, property) !== -1;
  }
};

答案 2 :(得分:0)

你可以在这里使用各种各样的东西,但也许some就是你想要的。

if (!selectedUsers.some(function (user) {
  return user.qid === $(this).val()
})) {
   selectedUsers.push(...)
}

这就是说,如果数组中的所有项都没有匹配的qid,请推送新的。

写得更优雅:

var qid = $(this).val()
if (!selectedUsers.some(user => user.qid === qid) {
  selectedUsers.push(..)
}