2011-08-02 147 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的“垫片”或跨浏览器的问题。 :-)