jQuery比较两个数组?

时间:2013-11-16 19:42:02

标签: jquery html arrays compare

我有一个数组,我想创建另一个新数组,并从HTML本身提取值,然后我想比较两个值并输出匹配值。

我要比较的现有数组:

var designersArrSelected = ["Von Blan","Foo Can","Diane con Fursternberg","BCBG MAX Azria"];

我的HTML

<ul id="seasonsDropDown">
  <li data-season="FALL 2013 HAUTE COUTURE">FALL 2013 HAUTE COUTURE
    <ul class="designers">
      <li data-designer="Alexander Wang">Alexander Wang</li>
      <li data-designer="BCBG MAX Azria">BCBG MAX Azria</li>
      <li data-designer="Diane con Fursternberg">Diane con Fursternberg</li>
      <li data-designer="Diane Von De">Diane Von De</li>
    </ul>
 </li>
</ul>

从我使用过的HTML中获取所有设计师的名字:

var designersArrAll = [];
var i = 0;


$(".designers>li").each(function(){
    designersArrAll[i++] = $(this).attr("data-designer");
});

根据我的例子,结果应选择“Diane con Fursternberg”和“BCBG MAX Azria,因为有两个匹配,但我应该如何比较两个数组的相同值?

这是笔: http://codepen.io/vincentccw/pen/eDrox

3 个答案:

答案 0 :(得分:1)

尝试使用$.inArray。您可以像这里一样使用它:

var found = $.inArray('pattern', stringToBeSearched) > -1;

结果是一个数字,表示您的字符串中的哪个位置开始您正在寻找的模式。 -1会告诉您stringToBeSearched中没有这样的模式。

答案 1 :(得分:1)

如果你想以老式的for循环方式来做,这里有一些我在这里找到的代码:How do I check if an array includes an object in JavaScript?。在每个内部都有一个if条件,你可以在匹配匹配时设置元素。可能不是最有效的,但它的工作原理。

小提琴:http://jsfiddle.net/LmQ9U/

    var designersArrAll = [];
    var designersArrSelected = ["Von Blan","Foo Can","Diane con Fursternberg","BCBG MAX Azria"];
     var i = 0;


     $(".designers>li").each(function(){
         designersArrAll[i++] = $(this).attr("data-designer");
     });

    $(".designers>li").each(function(){
        designer = $(this).attr("data-designer");
        designersArrAll[i++] = designer;           
        if ( contains( designersArrSelected , designer) ) {
            // do something here
            $(this).css('background', 'yellow');
        }
    });
    function contains(a, obj) {
        for (var i = 0; i < a.length; i++) {
                if (a[i] === obj) {
                    return true;
                }
            }
            return false;

答案 2 :(得分:1)

你可以这样做而不是你必须制作designersArrAll数组的循环。

var designersArrAll = $.map( $('.designers > li'), function(el){
  return $(el).data('designer');
});

至于比较两个数组,您可以使用此问题上的代码:How to know if two arrays have the same values