簡體   English   中英

為什么我不能刪除數組的元素?

[英]why i can not remove elements of an array?

我想問一下,我有一個數組,我想用陣列中存儲的元素消除數組中的一些元素,所以插圖如下:

array1 =進程,收集,成熟,庄稼,來自,領域,收割,是,切割array2 =,from,the,is,a,an

如果array1中有元素也是array2的元素。 然后這些元素將被淘汰。

我使用的方法如下:

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中的一些元素時,數組是我第一次通過以下方式更改為字符串:

var kataptg = array1.join (" ");

但是,如果使用該方法,有幾個元素應該丟失,但可能會丟失,因為模式不像上面的數組kata。

假設單詞“of” ,數組的模式kata =“of”; 但在模式array1 =“of”;

即使寫入模式與數組kata中的寫入模式不同,如何刪除這些元素?

array1中的項目沒有引號,因此JavaScript認為它們是(未定義的)變量。

假設你已經修復了(以及雜散引號),你的下一個問題是你在數組對象上調用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),例如將a2的單詞推入對象進行恆定時間查找,這樣它就是線性時間通過源數組來丟棄忽略的單詞,O(m + n):

var a1 = "process of gathering mature crops from the fields".split(" ");
var a2 = "of from the is a an".split(" ");
var ignores = {};
for (var i=a2.length-1;i>=0;--i) ignores[a2[i]] = true;
for (var i=a1.length-1;i>=0;--i) if (ignores[a1[i]]) a1.splice(i,1);
console.log(a1.join(' '));
// process gathering mature crops fields

這是使用正則表達式的另一個解決方案(可能是O(m + n)):

var s1 = "process of gathering mature crops from the fields";
var a2 = "of from the is a an".split(" ");
var re = new RegExp( "\\b(?:"+a2.join("|")+")\\b\\s*", "gi" );
var s2 = s1.replace( re, '' );
console.log( re ); // /\b(?:of|from|the|is|a|an)\b/gi
console.log( s2 ); // "process gathering mature crops fields"

您可以將所有'丟棄'放在一個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是= / ^(是| | | |來自)$ / i)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM