我试图查看一个数组中的每个值,看看是否有任何其他数组值中包含它们。 例如:
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<=(RowNum - 1); i++){
type.push( $("table.input-table > 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
<table border="0" cellspacing="0" width="100%" class="input-table">
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Title<span class="ms-formvalidation"> *</span>
</nobr>
</H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="Title" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}"/>
<SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit"/>
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Selector<span class="ms-formvalidation"> *</span>
</nobr>
</H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff5{$Pos}" ControlMode="Edit" FieldName="Selector" __designer:bind="{ddwrt:DataBind('u',concat('ff5',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Selector')}"/>
<SharePoint:FieldDescription runat="server" id="ff5description{$Pos}" FieldName="Selector" ControlMode="Edit"/>
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Required Hidden 1</nobr>
</H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff2{$Pos}" ControlMode="Edit" FieldName="Required_x0020_Hidden_x0020_1" __designer:bind="{ddwrt:DataBind('u',concat('ff2',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Required_x0020_Hidden_x0020_1')}"/>
<SharePoint:FieldDescription runat="server" id="ff2description{$Pos}" FieldName="Required_x0020_Hidden_x0020_1" ControlMode="Edit"/>
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Required Hidden 2</nobr>
</H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff3{$Pos}" ControlMode="Edit" FieldName="Required_x0020_Hidden_x0020_2" __designer:bind="{ddwrt:DataBind('u',concat('ff3',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Required_x0020_Hidden_x0020_2')}"/>
<SharePoint:FieldDescription runat="server" id="ff3description{$Pos}" FieldName="Required_x0020_Hidden_x0020_2" ControlMode="Edit"/>
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Not Required Hidden 1</nobr>
</H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff4{$Pos}" ControlMode="Edit" FieldName="Not_x0020_Required_x0020_Hidden_" __designer:bind="{ddwrt:DataBind('u',concat('ff4',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Not_x0020_Required_x0020_Hidden_')}"/>
<SharePoint:FieldDescription runat="server" id="ff4description{$Pos}" FieldName="Not_x0020_Required_x0020_Hidden_" ControlMode="Edit"/>
</td>
</tr>
<tr>
<td width="190px" valign="top" class="ms-formlabel">
<H3 class="ms-standardheader">
<nobr>Did It Work</nobr>
</H3>
</td>
<td width="400px" valign="top" class="ms-formbody">
<SharePoint:FormField runat="server" id="ff6{$Pos}" ControlMode="Edit" FieldName="Did_x0020_It_x0020_Work" __designer:bind="{ddwrt:DataBind('u',concat('ff6',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Did_x0020_It_x0020_Work')}"/>
<SharePoint:FieldDescription runat="server" id="ff6description{$Pos}" FieldName="Did_x0020_It_x0020_Work" ControlMode="Edit"/>
</td>
</tr>
<tr id="idAttachmentsRow"><td nowrap="true" valign="top" class="ms-formlabel" width="20%"><SharePoint:FieldLabel ControlMode="Edit" FieldName="Attachments" runat="server" /></td><td valign="top" class="ms-formbody" width="80%"><SharePoint:FormField runat="server" id="AttachmentsField" ControlMode="Edit" FieldName="Attachments" __designer:bind="{ddwrt:DataBind('u','AttachmentsField','Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Attachments')}" /><script>
var elm = document.getElementById("idAttachmentsTable");
if (elm == null || elm.rows.length == 0)
document.getElementById("idAttachmentsRow").style.display='none';
</script></td></tr>
<xsl:if test="$dvt_1_automode = '1'" ddwrt:cf_ignore="1">
<tr>
<td colspan="99" class="ms-vb">
<span ddwrt:amkeyfield="ID" ddwrt:amkeyvalue="ddwrt:EscapeDelims(string(@ID))" ddwrt:ammode="view"></span>
</td>
</tr>
</xsl:if>
</table>
任何帮助将不胜感激
答案 0 :(得分:0)
这可能不是最好的方法,但确实有效。它使用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);
};
};
答案 1 :(得分:0)
有两种方法可以解决这个问题,具体取决于您布置数组的方式。
选项一 - 假设两个数组都具有匹配的值结构
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);
}
});
});
});
答案 2 :(得分:0)
只需循环并将找到的内容添加到新数组中。不需要拼接。
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);
答案 3 :(得分:0)
如果您可以使用第三方库,则可以使用underscorejs,它提供了许多实用功能。
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);
答案 4 :(得分:0)
的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);