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的方式打字效率低下。你如何拥有你的阵列并不重要;我只是以自己的方式创建数组,这样我的每个代码示例都可以独立工作,而不依赖任何外部设置。