Javascript 从数组jquery中的子字符串的基中删除项
这似乎是一个非常新的问题,但我现在正在努力解决这个问题,并寻求一些帮助 下面是JavaScript中的一个示例数组Javascript 从数组jquery中的子字符串的基中删除项,javascript,jquery,arrays,search,Javascript,Jquery,Arrays,Search,这似乎是一个非常新的问题,但我现在正在努力解决这个问题,并寻求一些帮助 下面是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]"]; 现在,我希望根据搜索项从此数组中删除某些项,现在搜索项只包含字符串的一部分,例如 v
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]"];
如果有人能解决这个难题,那就太好了,我同时也在努力寻找解决方案。你可以使用
过滤器
数组方法
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);
var-SelectedFilters=[“[size:12:12]”、“[size:12:12]”、“[size:13:13]”、“[size:14:14]”、“[color:14:14]”、“[color:14:14]”、“[type:14]、“[type:14]”;
var searchTerm1='size',cnt=0,len=SelectedFilters.length-1;
而(cnt您的尝试没有成功,因为数组上的.indexOf()
查找精确匹配
因为根据您的问题和评论,您需要对原始数组进行变异,所以应该在数组上循环并单独测试每个字符串,然后在每次找到需要删除的字符串时调用.splice()
var-SelectedFilters=[“[size:12:12]”、“[size:12:12]”、“[size:13:13]”、“[size:14:14]”、“[color:14:14]”、“[color:14:14]”、“[type:14]、“[type:14]”;
var searchTerm1='size'
var searchTerm2='color'
对于(var i=SelectedFilters.length-1;i>-1;i--){
if(SelectedFilters[i].startsWith(searchTerm1,1)){
选择过滤器。拼接(i,1)
}
}
document.querySelector(“pre”).textContent=
stringify(SelectedFilters,null,2)
您真的需要修改原始数组吗,或者新数组可以吗?要求不允许我创建新数组,因为其他答案建议使用筛选函数,因为这样会创建一个新数组。您的尝试无效,因为.indexOf()
在数组上查找精确匹配。因此,您需要在数组上迭代,并对每个字符串分别执行测试。好的,我发布了一个对原始字符串进行变异的解决方案。