separa la lista se parece a:número de adjunto a una lista separada por comas
3434,346,1,6,46
Como puedo añadirá un número al que con javascript, pero no sólo si existe ya en ella?
separa la lista se parece a:número de adjunto a una lista separada por comas
3434,346,1,6,46
Como puedo añadirá un número al que con javascript, pero no sólo si existe ya en ella?
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.
'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
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
tenga en cuenta que indexOf no funciona en IE6 y 7 – bstakes
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
}
No consideró duplicados. –
Oh hombre, tienes razón. Entonces un simple si la verificación lo haría ... – Ribose
Apenas "simple". Mira los comentarios sobre la respuesta de Simjay. –
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. :-)
Una vez más, dejen de escribir etiquetas en sus títulos. –