2014-03-01 25 views
1

這是我的函數,它是對象的一部分,它接受來自搜索字段的搜索項作爲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); 
     } 
    }); 
} 

能正常工作在第一次運行,但是當我搜索相同期限再次用不同的關鍵字如配對「安全,JavaScript的」結果f_searchterms具有

[ 
    [ "cloud", "data", "security" ], 
    [ "security", " javascript" ] 
] 

在隨後的運行中,我想消除重複的關鍵字,並且只向f_searchterms添加唯一關鍵字,結果應該看起來像一個包含#n元素的單個數組。

[ 
    [ "cloud", "data", "security", "javascript" ] 
] 

回答

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語句,如此反覆這些測試是不相關的。

+0

謝謝你的回覆彌敦道,但我想問你一個問題。 – Vish

+0

@VISH我在聽你:)關於數組聲明的 –

+0

self.filter_searchterms = new Array();與self.filter_searchterms = [];相比隱式數組和數組構造函數有區別嗎? – Vish