2013-10-09 34 views
0

我有一個從HTML中的數據屬性獲取唯一編號的函數。在我的情況下,它被稱爲數據密鑰,它將有一個唯一的數字。如何防止將值推入數組兩次? (jQuery)

現在,當單擊具有數據鍵的HTML元素旁邊的按鈕時,該鍵號將被壓入數組中。

我不希望將相同的數字放入數組中多次。

有沒有簡單的方法來實現這個目標?我想象的做法是在推動之前檢查該元素是否已經在Array中,但是我覺得有一種更簡單的方法?

我Codepen:http://codepen.io/leongaban/pen/CEfxi

點擊enter image description here按鈕添加一個輸入值到數組。

enter image description here < 6-1被添加兩次

jQuery的

var deletedArray = []; 

$('.remove_info').unbind('click').bind("click", function(event) { 
    //console.log('clicked remove x'); 
    var value = $(this).prev().attr('value'); 
    var key = $(this).prev().data('key'); 

    deletedArray.push(key); 
    console.log('this value = '+value+' deletedArray = '+deletedArray); 
}); 
+0

什麼目的'.unbind( '點擊')。綁定( 「點擊」,...'? – j08691

+0

也許修改DOM以標記該元素已插入其值,並在插入例如標記之前檢查該標記。加入'data-inserted = true'。 –

回答

8

應該已經註釋,但推函數調用

if (deletedArray.indexOf(key) < 0) deletedArray.push(key); 

對於瀏覽器之前,把控制語句兼容性jQuery的inArray

if ($.inArray(key, deletedArray) < 0) deletedArray.push(key); 

注:indexOf不與IE 8和更早

+1

一致認爲,這似乎是方式;儘管對於那些沒有實現'Array.indexOf()'的瀏覽器,可能值得展示如何使用['$ .inArray()'](http://api.jquery.com/jQuery.inArray/)。 –

+1

同意@DavidThomas,因爲使用了'jQuery',所以'$ .inArray()'更好,因爲瀏覽器兼容性問題。 –

+0

@DavidThomas我對jQuery的'$ .inArray()'不太熟悉,你可以編輯答案,讓它具有替代的 –

0

兼容如果陣列中的所有元素都必須是唯一的,那麼我真的建議使用下劃線的陣列工會:

arr = ["1", 2, "apple"]; 

console.log(_.union(arr, 3)); //["1", 2, "apple", 3] 
console.log(_.union(arr, 2)); //["1", 2, "apple"] 
+0

記住,但「工會」是非變異的。如果你想「推」到ARR,做ARR = _.union(ARR,鍵) –

+0

爲什麼使用另一個庫已經有另一個庫能夠做到這一點或沒有它。 –

+0

爲什麼你會使用jQuery進行DOM操作的原因相同:下劃線實際上是任何js項目的標準工具帶 –