2011-08-02 189 views
7

列表的樣子:追加數以逗號分隔列表

3434,346,1,6,46

我如何可以追加一個數字,它使用JavaScript,但只有當它不,它已經存在?

+0

再次,請停止在標題中寫標籤。 –

回答

13

假設你的初始值是一個字符串(你沒有說)。

var listOfNumbers = '3434,346,1,6,46', add = 34332; 
var numbers = listOfNumbers.split(','); 
if(numbers.indexOf(add)!=-1) { 
    numbers.push(add); 
} 
listOfNumbers = numbers.join(','); 

基本上我將字符串轉換成一個數組,檢查使用的indexOf值的存在(),增加僅當它不存在。

然後我使用連接將該值轉換回字符串。

+2

'舊的瀏覽器不支持Array.prototype.indexOf',所以你需要一個墊片。另外,您應該檢查'!= - 1',因爲如果該號碼位於第一個插槽中,它將返回一個假否定。 – Yahel

+0

作爲一個旁註,它的ie8 +,所以你會好得多'Array.indexOf' http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript -array/143863#143863 – naveen

+0

請注意,indexOf在IE6和7中不起作用 – bstakes

2

如果這是一個字符串,可以使用.split().join()功能,以及.push()

var data = '3434,346,1,6,46'; 
var arr = data.split(','); 

var add = newInt; 
arr.push(newInt); 
data = arr.join(','); 

如果這已經是一個數組,你可以使用.push()

var data = [3434,346,1,6,46]; 
var add = newInt; 

data.push(add); 

更新:沒有讀最後一行檢查重複項,我能想到的最佳方法是循環:

var data = [3434,346,1,6,46]; 
var add = newInt; 

var exists = false; 
for (var i = 0; i < input.length; i++) { 
    if (data[i] == add) { 
     exists = true; 
     break; 
    } 
} 

if (!exists) { 
    data.push(add); 

    // then you would join if you wanted a string 
} 
+0

你沒有考慮重複。 –

+0

哦,你是對的。那麼簡單的如果檢查會做... – Ribose

+0

幾乎「簡單」。請參閱simjay答案的評論。 –

2

您還可以使用正則表達式:

function appendConditional(s, n) { 
    var re = new RegExp('(^|\\b)' + n + '(\\b|$)'); 
    if (!re.test(s)) { 
    return s + (s.length? ',' : '') + n; 
    } 
    return s; 
} 

var nums = '3434,346,1,6,46' 

alert(appendConditional(nums, '12')); // '3434,346,1,6,46,12' 
alert(appendConditional(nums, '6')); // '3434,346,1,6,46' 

哦,因爲一些真正喜歡的三元運營商和obfustically短代碼:

function appendConditional(s, n) { 
    var re = new RegExp('(^|\\b)' + n + '(\\b|$)'); 
    return s + (re.test(s)? '' : (''+s? ',':'') + n); 
} 

沒有jQuery的「墊片」或跨瀏覽器的問題。 :-)