簡體   English   中英

從數組jquery中的子字符串中刪除項目

[英]Remove items from based of substring in array jquery

這可能看起來是一個非常新手的問題,但到目前為止我正在努力解決這個問題並尋求一些幫助。

這是 JavaScript 中的示例數組

var SelectedFilters =  ["[size:12:12]","[size:12:12]","[size:13:13]","[size:14:14]", "[color:14:14]","[color:14:14]","[type:14:14]","[type:14:14]"];

現在我希望根據搜索詞從這個數組中刪除某些項目,現在搜索詞只包含字符串的一部分,例如

var searchTerm1 = 'size' 
var searchTerm2 = 'color'

我已經嘗試了以下代碼,但它不起作用:

var i = SelectedFilters.indexOf(searchTerm1);
    if (i != -1) 
     {
     SelectedFilters.splice(i, 1);
     }

我也試過運行 for 循環,迭代所有項目,但再次搜索失敗,因為它無法匹配“大小”或“顏色”

我在看什么:如果使用 searchterm1,結果輸出將是這樣的:

["[color:14:14]","[color:14:14]","[type:14:14]","[type:14:14]"];

如果使用 searchterm2,結果輸出應為:

["[size:12:12]","[size:12:12]","[size:13:13]","[size:14:14]","[type:14:14]","[type:14:14]"];

如果有人能解決這個難題,那就太好了,同時我也在努力尋找解決方案。

您的嘗試無效,因為 Array 上的.indexOf()尋找完全匹配。

由於根據您的問題和評論,您需要改變原始數組,因此您應該遍歷數組並單獨測試每個字符串,然后每次找到需要刪除的字符串時都調用.splice()

 var SelectedFilters = ["[size:12:12]","[size:12:12]","[size:13:13]","[size:14:14]", "[color:14:14]","[color:14:14]","[type:14:14]","[type:14:14]"]; var searchTerm1 = 'size' var searchTerm2 = 'color' for (var i = SelectedFilters.length-1; i > -1; i--) { if (SelectedFilters[i].startsWith(searchTerm1, 1)) { SelectedFilters.splice(i, 1) } } document.querySelector("pre").textContent = JSON.stringify(SelectedFilters, null, 2)
 <pre></pre>

上面使用的循環相反。 這很重要,因為每次我們執行.splice() ,數組都會重新索引,所以如果我們繼續,我們最終會跳過要刪除的相鄰項目。

.startsWith()方法檢查字符串是否以給定的搜索詞開頭。 我向第二個參數傳遞了一個值1以便它開始搜索第二個字符。

您可以使用數組的filter方法

var searchTerm = "size";
SelectedFilters  = SelectedFilters.filter(function(val){
  return val.indexOf( searchTerm ) == -1;
}); 

你可以用Array#filter做到這一點,

var searchTerm1 = 'size';
var result = SelectedFilters.filter(v => !v.includes(searchTerm1));

console.log(result); //["[color:14:14]","[color:14:14]","[type:14:14]","[type:14:14]"];

如果你想改變原始數組然后做,

var SelectedFilters = ["[size:12:12]", "[size:12:12]", "[size:13:13]", "[size:14:14]", "[color:14:14]", "[color:14:14]", "[type:14:14]", "[type:14:14]"];

var searchTerm1 = 'size',cnt = 0, len = SelectedFilters.length - 1;
while (cnt <= len) {
  if (SelectedFilters[len - cnt].includes(searchTerm1)) SelectedFilters.splice(len - cnt, 1);
  cnt++;
}

console.log(SelectedFilters);

演示

暫無
暫無

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

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