簡體   English   中英

嘗試從javascript / JQuery中的數組中刪除項目

[英]Trying to remove items from an array in javascript/JQuery

我已經在StackOverflow上閱讀了有關此問題的幾個問題,甚至找到了一些解決方案,但它們似乎都在做同樣奇怪的事情:

我有8個名稱的數組(數組A):

arrayA= ["person1", "person2", "person3", "person4", "person5", "person6", "person7", "person8"];

我有一個名稱為1的數組(數組B):

arrayB= ["person1"];

現在,我要從陣列A中刪除所有不在陣列B中出現的名稱。

因此,我寫了一個小函數,它遍歷數組A中的所有項目,並檢查它們是否出現在數組B中。如果沒有,我將它們從數組A中刪除。

因此,我尋找了一個從數組中刪除字符串的函數(在PHP中,這非常容易...),我發現了幾種方法,它們都給我帶來了完全相同的問題。 在下面的示例中,我使用jquery的$ .grep選擇了最干凈的方法:

 arrayA= ["person1", "person2", "person3", "person4", "person5", "person6", "person7", "person8"]; arrayB= ["person1"]; for (var i = 0, len = arrayA.length; i < len; i++) { if($.inArray(arrayA[i], arrayB) == -1){ var removeName= arrayA[i]; console.log('Removing row of: ' + removeName); /* $('tr[player=\\'' + removeName + '\\']').find('td') .wrapInner('<div style="display: block;" />') .parent() .find('td > div') .slideUp(700, function(){ $(this).parent().parent().remove(); }); */ arrayA= $.grep(arrayA, function(value) { return value != removeName; }); console.log('arrayA now consists of: ' + arrayA); } } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

如您所見,它僅從arrayA中刪除“偶數”項,即“ person2”,“ person4”,“ person6”和“ person8”。

如果我多次執行此函數,則第二次它將僅刪除“偶數”項(現在為“ person3”和“ person7”),第三次,它將(最終)刪除“ person5”。

有人可以告訴我我沒看到什么嗎? 您可以從控制台日志中看到,第一次運行它時,數組中的所有“奇數”項(即person3,person5和person7)都是“未定義的” ...

您可以使用do..while循環, Array.prototype.splice()從數組中刪除元素

 arrayA= ["vincent" , "Rumpelstilzchen" , "LuckeR" , "Nordland" , "Siegfried" , "NeKrone" , "Carnage" , "tom59fr"]; arrayB= ["vincent"]; var i = 0; do { if (arrayB[0] !== arrayA[i]) { arrayA.splice(i, 1); } else { ++i; } } while (i < arrayA.length); delete i; console.log(arrayA, arrayB); 

這是因為當您調用此命令時:

arrayA= $.grep(arrayA, function(value) {
  return value != removeName;
});

arrayA的長度發生變化,因此arrayA[k]將移動到arrayA[k-1] (當k> i時)。

因此,我們最好創建一個新數組來存儲過濾后的項目,並在迭代后將其值提供給arrayA。

 arrayA= ["person1", "person2", "person3", "person4", "person5", "person6", "person7", "person8"]; arrayB= ["person1","person4"]; var arrayC=[]; for (var i = 0, len = arrayA.length; i < len; i++) { console.log('inArray:'+$.inArray(arrayA[i], arrayB)) if($.inArray(arrayA[i], arrayB) != -1){ arrayC.push(arrayA[i]); } console.log('arrayC now consists of: ' + arrayC); } arrayA=arrayC; 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

暫無
暫無

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

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