【问题标题】:jQuery compare two arrays?jQuery比较两个数组?
【发布时间】:2013-11-17 04:28:46
【问题描述】:

我有一个数组,我想创建另一个新数组并从 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

【问题讨论】:

    标签: jquery html arrays compare


    【解决方案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;
    

    【讨论】:

    • 我注意到您添加了设计师ArrAll[i++] = 设计师;在每个函数中,有什么原因吗?
    • 只是觉得它更容易阅读。看到 if 语句中的所有括号让我头晕目眩。
    【解决方案2】:

    试试$.inArray。你可以在这里使用它:

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

    结果是一个数字,指示字符串中您正在寻找的模式的开始位置。 -1 会让你知道 stringToBeSearched 中没有这样的模式。

    【讨论】:

      【解决方案3】:

      您可以这样做,而不是创建 designersArrAll 数组的循环。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 2010-12-11
        • 2012-12-26
        • 2021-03-21
        • 2019-02-20
        • 1970-01-01
        相关资源
        最近更新 更多