从数组jquery

时间:2016-05-11 12:22:09

标签: 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]"];

现在我希望根据搜索字词从此数组中删除某些项目,现在搜索字词只包含字符串的一部分,例如

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]"];

如果有人能解决这个难题会很棒,我也在努力寻找解决方案。

3 个答案:

答案 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);

DEMO