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