Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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

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 - Fatal编程技术网

Javascript 为什么我不能删除数组的元素?

Javascript 为什么我不能删除数组的元素?,javascript,arrays,Javascript,Arrays,我想问一下,我有一个数组,我想用我存储在数组中的元素消除数组中的一些元素,如下图所示: var array1 = ["of","gathering","mature","crops","from","the","fields","Reaping","is","the","cutting"]; var kata = new Array(); kata[0] = " is "; kata[1] = " the "; kata[3] = " of "; kata[4] = " a "; kata[5]

我想问一下,我有一个数组,我想用我存储在数组中的元素消除数组中的一些元素,如下图所示:

var array1 = ["of","gathering","mature","crops","from","the","fields","Reaping","is","the","cutting"];
var kata = new Array();
kata[0] = " is ";
kata[1] = " the ";
kata[3] = " of ";
kata[4] = " a ";
kata[5] = " from ";


for(var i=0,regex; i<kata.length; i++){
        var regex = new RegExp(kata[i],"gi");
        array1 = array1.replace(regex," ");
    }
array1=过程,of,采集,成熟,作物,来自,田地,收割,is,the,切割 array2=of,from,the,is,a,an

如果数组中有元素,则1也是数组2的元素。然后这些元素将被消除

我使用的方法如下:

var array1 = ["of","gathering","mature","crops","from","the","fields","Reaping","is","the","cutting"];
var kata = new Array();
kata[0] = " is ";
kata[1] = " the ";
kata[3] = " of ";
kata[4] = " a ";
kata[5] = " from ";


for(var i=0,regex; i<kata.length; i++){
        var regex = new RegExp(kata[i],"gi");
        array1 = array1.replace(regex," ");
    }
但是,如果使用该方法,有几个元素应该丢失,但可能会丢失,因为模式不喜欢上面的数组kata

假设“”的单词,数组的模式是kata=“of”但在模式上array1=“of”


即使写入模式与数组kata中的写入模式不同,如何删除这些元素?

数组1中的项周围没有引号,因此JavaScript认为它们是(未定义的)变量


假设您已经修复了这个问题(以及错误的引号),那么下一个问题是您正在对数组对象调用replace()。replace()仅适用于字符串。

数组1中的项周围没有引号,因此JavaScript认为它们是(未定义的)变量

# Simplified from
# http://phrogz.net/JS/Classes/ExtendingJavaScriptObjectsAndClasses.html#example5
Array.prototype.subtract=function(a2){ 
   var a1=this;
   for (var i=a1.length-1;i>=0;--i){ 
      for (var j=0,len=a2.length;j<len;j++) if (a2[j]==a1[i]) {
        a1.splice(i,1);
        break;
      } 
   } 
   return a1;
}

var a1 = "process of gathering mature crops from the fields".split(" ");
var a2 = "of from the is a an".split(" ");
a1.subtract(a2);
console.log(a1.join(' '));
// process gathering mature crops fields
假设您已经修复了这个问题(以及错误的引号),那么下一个问题是您正在对数组对象调用replace()。replace()仅适用于字符串

# Simplified from
# http://phrogz.net/JS/Classes/ExtendingJavaScriptObjectsAndClasses.html#example5
Array.prototype.subtract=function(a2){ 
   var a1=this;
   for (var i=a1.length-1;i>=0;--i){ 
      for (var j=0,len=a2.length;j<len;j++) if (a2[j]==a1[i]) {
        a1.splice(i,1);
        break;
      } 
   } 
   return a1;
}

var a1 = "process of gathering mature crops from the fields".split(" ");
var a2 = "of from the is a an".split(" ");
a1.subtract(a2);
console.log(a1.join(' '));
// process gathering mature crops fields
这里还有一个使用正则表达式的解决方案(可能是O(m+n)):

这里还有一个使用正则表达式的解决方案(可能是O(m+n)):


您可以将所有“丢弃”放在一个reg exp中,并测试每个数组项中的任何一个

从阵列的末尾开始,您可以在接近阵列的开头时拼接出任何丢弃

var array1= ['of','gathering','mature','crops','from','the','fields',
'Reaping','is','the','cutting'],
kata= ['is','the','of','a','from'], L= array1.length,
rx= RegExp('^('+kata.join('|')+')$','i');

while(L){
    if(rx.test(array1[--L])) array1.splice(L, 1);
}

alert(array1)
/* 返回值:(数组) [‘采集’、‘成熟’、‘作物’、‘田地’、‘收割’、‘切割’] */


(这里的rx是=/^(是| a | from的|)$/i)

您可以将所有的“丢弃”放在一个注册表exp中,并测试每个数组项中的任何一个

从阵列的末尾开始,您可以在接近阵列的开头时拼接出任何丢弃

var array1= ['of','gathering','mature','crops','from','the','fields',
'Reaping','is','the','cutting'],
kata= ['is','the','of','a','from'], L= array1.length,
rx= RegExp('^('+kata.join('|')+')$','i');

while(L){
    if(rx.test(array1[--L])) array1.splice(L, 1);
}

alert(array1)
/* 返回值:(数组) [‘采集’、‘成熟’、‘作物’、‘田地’、‘收割’、‘切割’] */


(这里的rx是=/^(是| a | from的|)$/i)

对不起..我忘了在数组中加引号,但我确信我的真实代码有引号,因为我从var str得到它,它用split()替换数组中的引号;“作物和收割前”后面缺少引号。哦,我的天啊,对不起,我错过了。但是我的数组已经在字符串中更改了,但是为什么我不能替换不同位置的一些单词呢?对不起。我忘了在数组中加引号,但我确定我的真实代码有引号,因为我从var str得到它,它用split()替换数组中的一些单词;你在“作物和收割前”之后缺少引号。哦,我的天啊,对不起,我错过了它。但是可以肯定的是,我的数组已经在字符串中更改了,但是为什么我不能替换不同位置的一些单词呢?@user495688没有解释,有工作代码和它产生的输出。如果您对特定代码有疑问,请研究它或在此处提问。@user495688您创建a2的方式打字效率低下。你如何拥有你的阵列并不重要;我只是以自己的方式创建数组,这样我的每个代码示例都可以独立工作,而不依赖任何外部设置。@user495688没有解释,只有工作代码和它产生的输出。如果您对特定代码有疑问,请研究它或在此处提问。@user495688您创建a2的方式打字效率低下。你如何拥有你的阵列并不重要;我只是以自己的方式创建数组,这样我的每个代码示例都可以独立工作,而不依赖任何外部设置。