如何使用JQuery inArray检查数组中是否有不同的值?

时间:2013-03-04 12:55:36

标签: jquery arrays

我编写了一些代码来检查是否存在数组,如果没有,则创建一个名为window.list

的代码

然后检查数组是否包含2或3值,如果没有,则将它们添加到列表中。

如果它们在列表中已经输出“值已经在列表中!”然后突破了这个功能。

当我执行代码时,它只识别inArray的第一个检查2值的子句。 3不起作用。我希望将来能够添加更多值。我不确定这是编写此查询的最有效方法。

if (typeof window.list == "undefined" || !(window.list instanceof Array)) {
    window.list = new Array;
}

if ($.inArray(2, window.list) == -1 || $.inArray(3, window.list) == -1) {
    window.list.push(presentationId);
} else {
    console.log("Value is already in the list!")
    return;
}

2 个答案:

答案 0 :(得分:2)

如果presentationID为2或3,为什么不尝试这样的代码:

...
if ($.inArray(presentationID, window.list) == -1) {
    window.list.push(presentationId);
} else {
...

答案 1 :(得分:1)

您可以合并数组并仅使用jQuery

保留唯一值
window.list = [2,3];

window.list = $.merge(window.list, [2,3,7,2,60]);
window.list = $.unique(window.list);

//OUTPUT: window.list = [2,3,7,60];

Fiddle Here


或者,如果您想针对数组检查数组并对找到的/未找到的实例进行操作。您可以创建一个简单的插件Fiddle Here

你的插件

(function ($) {
  $.fn.Contains = function(value, success, failure) {
      var arr = this;
      if(value instanceof Array){
          $(value).each(function(i,item){
              var found = $.inArray(item, arr) > -1;
              if (found){
                  success(item);
              } else {
                  failure(item);
              }
        });
      }
  };
})(jQuery);

然后称之为:

window.list = [2,3];

$(window.list).Contains([2, 3, 6, 7], function(foundValue){
    // Handle the foundValue here
    alert('found: ' + foundValue);
}, function(missingValue){
    // Handle the missingValue here
    alert('missing: ' + missingValue);
});

或者,如果您想使用自定义插件通过一次调用将不同的值合并到一个数组,则可以执行以下操作Fiddle here

// Your plugin to merge the distinct values
(function ($) {
  $.fn.MergeDistinct = function(value) {
      var arr = this;
      if(value instanceof Array){
          $(value).each(function(i,item){
              var found = $.inArray(item, arr) > -1;
              if (!found) arr.push(item);
        });
      }
      return arr;
  };
})(jQuery);

// Your list of items
window.list = [2,3];

// Merge the new values without creating duplicates
window.list = $(window.list).MergeDistinct([2, 3, 6, 7]);

//OUTPUT: window.list = [2,3,6,7];