繁体   English   中英

如何在Jquery / Js中匹配2数组的值

[英]How to match values of 2 array in Jquery /Js

如果list2的值等于list1的值,我有2个列表,那么我想向HTML选项中添加一个具有匹配值的类。

 // var list1 = $('select#workers option').toArray().map(item => item.value); list1 = ["19", "78", "73", "26", "79", "93", "63", "70", "82", "60", "42", "90", "91", "84", "92", "64", "1", "83", "85", "61", "21", "45"]; list2= ["93", "78", "91", "60", "83", "90", "84", "79", "82", "42"]; $.each(list1, function( index, value ) { var list1val = value; $.each(list2, function( index, value ) { var list2val = value; if(list1val==list2val){ // $('select#workers option').addClass('green'); console.log('Add class'); } else{ $('select#workers option').addClass('red'); } }); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select class="form-control" id="workers" multiple="" size="5"> <option value="19">Administration</option> <option value="78">Alan </option> <option value="73">Allister </option> <option value="26">Andrew </option> <option value="79">Chris </option> <option value="93">Clayton </option> <option value="63">Dale Morcom</option> <option value="70">David </option> <option value="82">Dean </option> <option value="60">Deano </option> <option value="42">Drew </option> <option value="90">Gabriel </option> <option value="91"> Grant</option> <option value="84">Jeremy Beeston</option> <option value="92"> Rolfe</option> <option value="64"> Johnson</option> <option value="1">Luke </option> <option value="83">Matt </option> <option value="85">Michelle </option> <option value="61">Playsafe</option> <option value="21">Squizzy </option> <option value="45">Stuart </option> </select> 

我想将一个类添加到具有列表2中匹配值的选项。

但是$('select#workers option').addClass('green'); 正在将类添加到所有选项。

使用属性选择器:

$("select#workers option[value='" + list1val + "']").addClass("green");

尝试根据属性value添加类。

 list1 = ["19", "78", "73", "26", "79", "93", "63", "70", "82", "60", "42", "90", "91", "84", "92", "64", "1", "83", "85", "61", "21", "45"]; list2= ["93", "78", "91", "60", "83", "90", "84", "79", "82", "42"]; $.each(list1, function( index, value ) { var list1val = value; $.each(list2, function( index, value ) { var list2val = value; if(list1val==list2val){ $('select#workers option[value = '+list2val+']').addClass('green'); console.log('Add class'); } else{ $('select#workers option[value = '+list2val+']').addClass('red'); } }); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <select class="form-control" id="workers" multiple="" size="5"> <option value="19">Administration</option> <option value="78">Alan </option> <option value="73">Allister </option> <option value="26">Andrew </option> <option value="79">Chris </option> <option value="93">Clayton </option> <option value="63">Dale Morcom</option> <option value="70">David </option> <option value="82">Dean </option> <option value="60">Deano </option> <option value="42">Drew </option> <option value="90">Gabriel </option> <option value="91"> Grant</option> <option value="84">Jeremy Beeston</option> <option value="92"> Rolfe</option> <option value="64"> Johnson</option> <option value="1">Luke </option> <option value="83">Matt </option> <option value="85">Michelle </option> <option value="61">Playsafe</option> <option value="21">Squizzy </option> <option value="45">Stuart </option> </select> 

尝试首先使用O(n + m)时间复杂度而不是嵌套循环O(n ^ 2)获取匹配列表

var list1 = ["19", "78", "73", "26", "79", "93", "63", "70", "82", "60", "42", "90", "91", "84", "92", "64", "1", "83", "85", "61", "21", "45"];
var list2=  ["93", "78", "91", "60", "83", "90", "84", "79", "82", "42"];

var mapList1 = {};
list1.forEach(function(value) {
    mapList1[value] = true;
});

var matches = [];
list2.forEach(function(value) {
    if (mapList1[value]) {
    matches.push(value);
  }
});
console.log(matches)

然后,您可以通过添加课程来使用匹配项来突出显示

尝试这个

list1 = ["19", "78", "73", "26", "79", "93", "63", "70", "82", "60", "42", "90", "91", "84", "92", "64", "1", "83", "85", "61", "21", "45"];
    list2=  ["93", "78", "91", "60", "83", "90", "84", "79", "82", "42"];

    var found = list1.find(function(element) {

            for(var i = list2.length; i--;) {

                 if(list2[i] === element)
                      console.log(true);
                }
       console.log(false);
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM