Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数组jquery中的子字符串的基中删除项_Javascript_Jquery_Arrays_Search - Fatal编程技术网

Javascript 从数组jquery中的子字符串的基中删除项

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

这似乎是一个非常新的问题,但我现在正在努力解决这个问题,并寻求一些帮助

下面是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]"];

如果有人能解决这个难题,那就太好了,我同时也在努力寻找解决方案。

你可以使用
过滤器
数组方法

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()
在数组上查找精确匹配。因此,您需要在数组上迭代,并对每个字符串分别执行测试。好的,我发布了一个对原始字符串进行变异的解决方案。