2011-08-02 16 views

Respuesta

13

Suponiendo que su valor inicial es una cadena (no lo dijo).

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

Básicamente i convertir la cadena en un array, compruebe la existencia del valor utilizando indexOf(), añadiendo sólo si no existe.

Luego, convierto el valor de nuevo en una cadena usando join.

+2

'Array.prototype.indexOf' no es compatible con los navegadores más antiguos, por lo que necesitaría una cuña. Además, debe verificar '! = - 1', ya que devolverá un falso negativo si el número está en la primera ranura. – Yahel

+0

como una nota al margen, su ie8 + por lo que sería mucho mejor con un 'Array.indexOf' http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript -array/143863 # 143863 – naveen

+0

tenga en cuenta que indexOf no funciona en IE6 y 7 – bstakes

2

Si esto es una cadena, puede utilizar los .split() y .join() funciones, así como .push():

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

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

Si eso ya es una matriz, sólo puede utilizar .push():

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

data.push(add); 

ACTUALIZACIÓN: No leí la última línea para buscar duplicados, el mejor enfoque que puedo pensar es un ciclo:

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

No consideró duplicados. –

+0

Oh hombre, tienes razón. Entonces un simple si la verificación lo haría ... – Ribose

+0

Apenas "simple". Mira los comentarios sobre la respuesta de Simjay. –

2

También puede utilizar una expresión regular:

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' 

Oh, ya que algunos realmente como operadores ternarios y el código obfustically corta:

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

Sin jQuery, problemas de "cuñas" o cross-browser. :-)

Cuestiones relacionadas