重复条目的数组问题

时间:2014-03-01 09:22:55

标签: javascript jquery arrays

这是我的函数,它是对象的一部分,它从搜索字段接受搜索词作为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" ]
]

1 个答案:

答案 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语句中都使用完全相同的代码,所以这些测试再次无关紧要。