这似乎是一个非常新手的问题,但我现在正在努力解决这个问题,并寻求一些帮助。
以下是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循环,迭代所有项目,但再次搜索失败,因为它无法匹配' size'或者'颜色'
我在寻找:如果使用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]"];
如果有人能解决这个难题会很棒,我也在努力寻找解决方案。
答案 0 :(得分:1)
您的尝试无效,因为数组上的.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
,以便它开始搜索第二个字符。
答案 1 :(得分:0)
您可以使用数组的filter
方法
var searchTerm = "size";
SelectedFilters = SelectedFilters.filter(function(val){
return val.indexOf( searchTerm ) == -1;
});
答案 2 :(得分:0)
您可以使用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);