7
votes

Numéro d'annexe à une liste séparée par des virgules

La liste ressemble à:

3434,346,1,6,46

Comment puis-je ajouter un numéro avec JavaScript, mais seulement si cela n'existe pas déjà?


1 commentaires

Encore une fois, veuillez arrêter d'écrire des balises dans vos titres.


3 Réponses :


13
votes

En supposant que votre valeur initiale est une chaîne (vous n'avez pas dit).

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


3 commentaires

array.pototype.indexof n'est pas pris en charge dans les navigateurs plus anciens, vous auriez donc besoin d'une cale. De plus, vous devriez vérifier ! = - 1 , car il retournera un faux négatif si le numéro est dans la première fente.


En tant que note latérale, son IE8 + vous seriez donc beaucoup mieux intégré à un array.indexof Stackoverflow.com/questions/143847/...


Compte tenu des balises indiquent que l'affiche utilise JQuery, l'équivalent jQuery de $. Inarray (valeur, Array) doit être compatible avec navigateur croisé et remplacer directement array.indexof () . Comme avec indexofofof () , n'oubliez pas de vérifier le résultat! = -1.



2
votes

Si c'est une chaîne, vous pouvez utiliser le .split () code> et .join () code> fonction, ainsi que .push () Code>:

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
}


3 commentaires

Vous n'avez pas tenu compte des doublons.


À peine "simple". Voir les commentaires sur la réponse de Simjay.


Eek, et j'ai eu affaire à JavaScript suffisamment pour savoir que les tableaux n'ont pas d'index de () ~ ~ ~ devinez ce pas simple. EDIT: Je suppose qu'ils ont fait? Oh je suis censé l'éviter. Bien alors je fais.



1
votes

Vous pouvez également utiliser une expression régulière:

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


0 commentaires