使用数组过滤数组Javascript

我试图查看一个数组中的每个值,看看它们是否包含在任何其他数组值中。 例如:

arrOne = ['a', 'b' ,'c' ]; arrTwo = ['option a', 'option c', 'option b', 'option d']; 

因此,我希望它循环查看arrTwo中具有arrOne值之一的每个值,并删除那些不是我得到的值:

 arrFinal = ['option a', 'option c', 'option b']; 

这是我正在使用的代码:

JavaScript的

 function PreSaveAction() { var Fields = ['input','select','textarea'] var ReqEmpty = 0; var RowNum = ( $('table.input-table > tbody > tr').length); var type = []; var typeFinal = []; var FieldType; var FieldTypeNum; for(var i=0; i tbody > tr").eq(i).html()); }; alert(type.length); //Where a need the filter code //using Req as arrOne and type as arrTwo for(var i = 0; i <= (type.length - 1); i++){ for(var ii = 0; ii <= (Fields.length - 1); ii++){ if(type[i].indexOf(Fields[ii]) == -1){ FieldType = (Fields[ii]); break; }; }; for(var i=0; i <= (Req.length - 1); i++){ if($('.more-options').is(':visible') && ($("" + FieldType + "[title=" +"'" + Req[i] + "'"+ "]").val() == "") ) { ReqEmpty += 1; }; }; }; if(ReqEmpty == 0) { return true; }else if(ReqEmpty == 1){ alert("There is 1 empty required field"); return false; }else{ alert("There are " + ReqEmpty + " empty required fields"); return false; }; }; 

使用SharePoint生成的HTML

 

Title *

Selector *

Required Hidden 1

Required Hidden 2

Not Required Hidden 1

Did It Work

var elm = document.getElementById("idAttachmentsTable"); if (elm == null || elm.rows.length == 0) document.getElementById("idAttachmentsRow").style.display='none';

任何帮助,将不胜感激

这可能不是最好的方法,但确实有效。 它使用arrTwo的类型和ArrOne的Req。

 for(var i = (type.length - 1); i >= 0 ; i--){ var SpliceVal = 0; for(var ii = 0; ii <= (Req.length -1); ii++){ if(type[i].indexOf(Req[ii]) == -1){ SpliceVal += 1; }; }; if(SpliceVal == Req.length){ type.splice(i, 1); }; }; 

有两种方法可以解决这个问题,具体取决于您布置arrays的方式。

选项一 – 假设两个数组都具有匹配的值结构

 var arrOne = ['option a', 'option b', 'option c']; var arrTwo = ['option a', 'option c', 'option b', 'option d']; var arrFinal = []; $(document).ready(function () { $.each(arrOne, function (key, value) { var index = $.inArray(value, arrTwo); if (index != -1) { arrFinal.push(arrTwo[index]); console.log(value); } }); }); 

选项二 – 假设两个数组都没有匹配的值结构(上面的示例)

  var arrOne = ['a', 'b', 'c']; var arrTwo = ['option a', 'option c', 'option b', 'option d']; var arrFinal = []; $(document).ready(function () { $.each(arrOne, function (key1, value1) { $.each(arrTwo, function (key2, value2) { var index = value2.indexOf(value1); if (index != -1) { arrFinal.push(value2); console.log(value2); } }); }); }); 

只需循环并将它找到的那些添加到新数组中。 无需拼接。

 function result(arr1, arr2) { var out = []; for (var i = 0, l = arr2.length; i < l; i++) { var el2 = arr2[i]; var rel2 = el2.replace('option ', ''); if (arr1.indexOf(rel2) > -1) { out.push(el2); } } return out; } result(arr1, arr2); 

DEMO

如果您可以使用第三方库,则可以使用underscorejs ,它提供了许多实用function。

 function customFilter(arrOne, arrTwo) { return _.filter(arrTwo, function(item){ var res = item.substring('option '.length, item.length); return _.contains(arrOne, res); }); } var result = customFilter(arrOne, arrTwo); 

DEMO

JavaScript的

 Array.prototype.Filter = function(filters) { var t = new Array(); for(var i = 0; i < this.length; ++i) { for(var j = 0; j < filters.length; ++j) { if(this[i].contains(filters[j])) { t.push(this[i]); } } } return(t); }; /* Exemple */ var filters = [ 'a', 'b' ,'c' ]; var arr = [ 'option a', 'option c', 'option b', 'option d' ]; var result = arr.Filter(filters); alert(result);