这是我的函数,它是对象的一部分,它从搜索字段接受搜索词作为arg,使用toString()
方法将其转换为字符串。搜索可以包含逗号分隔的关键字,例如“云,数据,安全”
$('form').on('submit', function () {
var searchVal = [$("#cc-search--field").val().trim().toLowerCase()];
$("#cc-search--field").val('');
// vo.sTerms.push(searchVal.toString());
vo.addspinner();
vo.f_constructURL(searchVal.toString());
});
f_constructURL: function (searchterms) {
var self = this,
rank = self.f_rank,
url = self.f_url;
if (self.filter_searchterms.length == 0) {
self.filter_searchterms.push(searchterms.split(","));
} else if (self.filter_searchterms.length > 0) {
// reset the array
self.filter_searchterms = [];
self.filter_searchterms.push(searchterms.split(","));
};
$.grep(self.filter_searchterms, function (e, i) {
if (self.f_searchterms.length == 0) {
if ($.inArray(e, self.f_searchterms) === -1) self.f_searchterms.push(e);
} else if (self.f_searchterms.length > 0) {
if ($.inArray(e, self.f_searchterms) === -1) self.f_searchterms.push(e);
}
});
}
这在第一次运行时效果很好,但是当我再次搜索相同的术语并使用不同的关键字,例如“security,javascript”时,结果f_searchterms
已
[
[ "cloud", "data", "security" ],
[ "security", " javascript" ]
]
在后续运行中,我想删除重复的关键字,只向f_searchterms
添加唯一的关键字,结果应该看起来像一个包含#n
元素的数组。
[
[ "cloud", "data", "security", "javascript" ]
]
答案 0 :(得分:0)
我对您的代码进行了一些更改,因为我认为某些测试没用。有关完整代码,请参阅here。
我首先改变了这个:
if (self.filter_searchterms.length == 0){
self.filter_searchterms.push(searchterms.split(","));
} else if(self.filter_searchterms.length > 0) {
// reset the array
self.filter_searchterms = [];
self.filter_searchterms.push(searchterms.split(","));
}
到此:
self.filter_searchterms = new Array();
var myElements = searchterms.split(",");
for (var i = 0; i < myElements.length; i++) {
self.filter_searchterms.push(myElements[i]); //pushing each elements inside the list
}
您希望始终重新填充新数组,因此我简化了代码删除测试。然后,我没有将数组推入filter_searchterms
,而是推送了拆分结果的每个元素。
然后我改变了这个:
if (self.f_searchterms.length == 0) {
if ($.inArray(e, self.f_searchterms) === -1) self.f_searchterms.push(e);
} else if (self.f_searchterms.length > 0){
if ($.inArray(e, self.f_searchterms) === -1) self.f_searchterms.push(e);
}
}
到此:
if ($.inArray(e, self.f_searchterms) === -1)
self.f_searchterms.push(e);
因为你在每个if
语句中都使用完全相同的代码,所以这些测试再次无关紧要。