[英]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.