Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较并删除数组元素_Javascript_Arrays_Array Splice - Fatal编程技术网

Javascript 比较并删除数组元素

Javascript 比较并删除数组元素,javascript,arrays,array-splice,Javascript,Arrays,Array Splice,我在这段代码中有一个我似乎无法解决的bug。如果只有一个Act实例,那么它将正常工作。但当Act的实例超过1个时,它就会中断。不知道我在这里错过了什么 //Find all instances of italics var findItalics = new RegExp(/(<em>.*?<\/em>)/g); var italicsArray = []; var italicCount; while (italicCount = findItalics.exec(s

我在这段代码中有一个我似乎无法解决的bug。如果只有一个Act实例,那么它将正常工作。但当Act的实例超过1个时,它就会中断。不知道我在这里错过了什么

//Find all instances of italics
var findItalics = new RegExp(/(<em>.*?<\/em>)/g);
var italicsArray = [];
var italicCount;

while (italicCount = findItalics.exec(searchInput)) {
    italicsArray.push(italicCount[0]);
}

//Find the italics containing the word 'Act'
var keywordItalics = new RegExp(/<em>.*?(Act).*?<\/em>/g);
var keywordItalicArray = [];
var italicCountKeyword;

while (italicCountKeyword = keywordItalics.exec(italicsArray)) {
    keywordItalicArray.push(italicCountKeyword[0]);
}

//Remove all instances of the keyword(s)
for (var tlcs = italicsArray.length - 1; tlcs >= 0; tlcs--) {
    if(italicsArray[tlcs] == keywordItalicArray) {
        italicsArray.splice(tlcs, 1);
    }
}
//查找所有斜体的实例
var findItalics=new RegExp(/(.*)/g);
var italicsArray=[];
意大利var账户;
while(italicCount=findItalics.exec(searchInput)){
italicsArray.push(italicCount[0]);
}
//查找包含“Act”一词的斜体
var关键字斜体=新的RegExp(/.*(Act)。*?/g);
var关键字Italicarray=[];
var ItaliAccountKeyword;
while(ItalicAccountKeyword=keywordItalics.exec(ItalicArray)){
关键字italicarray.push(italicCountKeyword[0]);
}
//删除关键字的所有实例
对于(var tlcs=italicsArray.length-1;tlcs>=0;tlcs--){
if(斜体数组[tlcs]==关键字ItalicCarray){
斜体阵列拼接(tlcs,1);
}
}

感谢@artgb帮助我重新思考这个问题

//Find all instances of italics
var findItalics = new RegExp(/(<em>.*?<\/em>)/g);
var italicsArray = [];
var italicCount;

while (italicCount = findItalics.exec(searchInput)) {
    italicsArray.push(italicCount[0]);
}

//Find the italics containing the word 'Act'
var keywordItalics = new RegExp(/<em>.*?(Act).*?<\/em>/g);
var keywordItalicArray = [];
var italicCountKeyword;

while (italicCountKeyword = keywordItalics.exec(searchInput)) {
    keywordItalicArray.push(italicCountKeyword[0]);
}

//Remove all instances of the keyword(s)
for(var xXx = 0; xXx < keywordItalicArray.length; xXx++){   
    for (var tlcs = italicsArray.length - 1; tlcs >= 0; tlcs--) {
        if(italicsArray[tlcs] == keywordItalicArray[xXx]) {
            italicsArray.splice(tlcs, 1);
        }
    }
}
//查找所有斜体的实例
var findItalics=new RegExp(/(.*)/g);
var italicsArray=[];
意大利var账户;
while(italicCount=findItalics.exec(searchInput)){
italicsArray.push(italicCount[0]);
}
//查找包含“Act”一词的斜体
var关键字斜体=新的RegExp(/.*(Act)。*?/g);
var关键字Italicarray=[];
var ItaliAccountKeyword;
while(ItalicAccountKeyword=keywordItalics.exec(searchInput)){
关键字italicarray.push(italicCountKeyword[0]);
}
//删除关键字的所有实例
对于(var xXx=0;xXx=0;tlcs--){
if(斜体数组[tlcs]==关键字斜体数组[xXx]){
斜体阵列拼接(tlcs,1);
}
}
}
如果你只是想摆脱所有包含“Act”的em,你需要做的就是:

   document.body.innerHTML = document.body.innerHTML.replace(
     /<em>.*?Act.*?<\/em>/g,
     ''
   );
document.body.innerHTML=document.body.innerHTML.replace(
/*?法案*?/g,
''
);
这将删除文档中包含“Act”的em的所有痕迹(有效地将这些字符串替换为空字符串,也称为nothing)。然而,这将导致回流。如果它们位于主体之外的包含元素中,则最好先获取包含元素(而不是使用主体)。有“更好”的方法可以做到这一点,但这可能是最简单的编码方式

更新:从阵列中删除带有“Act”的em的简单方法是:

italicsArray = italicsArray
  .join('_SEP_')  // Convert to string
  .replace(/<em>.*?Act.*?<\/em>/g,'')  // Delete matched entries
  .replace(/(_SEP_)+/g,'_SEP_')  // Collapse multiple seperators 
  .split('_SEP_')  // Convert back to array 
;
italicsArray=italicsArray
.join(''u SEP')//转换为字符串
.replace(/.*Act.*?/g',)//删除匹配的条目
.更换(/(\u SEP)+/g,“\u SEP')//折叠多个分离器
.split(''u SEP')//转换回数组
;

这基本上使用了一个分隔符
\u SEP\u
(以避免与包含“,”的字符串发生冲突),并将数组转换为字符串,删除与regexp的所有匹配项,删除将成为未定义项的项,然后以相同的名称重新创建数组。

是否比较元素和数组
italicsArray[tlcs]==关键字Italicarray
?我创建了两个数组。基本上,我在寻找一个匹配。如果匹配,我希望将其从数组中删除。是否要执行此操作?
keywordItalicArray.indexOf(italicsArray[tlcs])!=-1
?我想是的。我甚至不认为我需要关键字Italicarray。我应该能够从italicsArray中找到RegExp no?请制作工作小提琴,然后可以帮助您解决。谢谢。但我需要从阵列中删除这个。不是身体。:)
var keywordItalics = /<em>(.*?Act.*?)<\/em>/g;
var keywordItalics = document.getElementsByTagName('em');
   document.body.innerHTML = document.body.innerHTML.replace(
     /<em>.*?Act.*?<\/em>/g,
     ''
   );
italicsArray = italicsArray
  .join('_SEP_')  // Convert to string
  .replace(/<em>.*?Act.*?<\/em>/g,'')  // Delete matched entries
  .replace(/(_SEP_)+/g,'_SEP_')  // Collapse multiple seperators 
  .split('_SEP_')  // Convert back to array 
;