2011-08-02 13 views

Odpowiedz

13

Zakładając, że twoja wartość początkowa jest ciągiem (nie powiedziałeś).

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

Zasadniczo przekonwertować ciąg do tablicy, należy sprawdzić istnienie wartości przy użyciu indexOf(), dodając tylko wtedy, gdy nie istnieje.

Następnie przekonwertuję wartość z powrotem na ciąg znaków przy użyciu sprzężenia.

+2

'Array.prototype.indexOf' nie jest obsługiwany w starszych przeglądarkach, więc potrzebujesz podkładki. Powinieneś także sprawdzić '! = - 1', ponieważ zwróci on fałszywy wynik ujemny, jeśli numer znajduje się w pierwszym gnieździe. – Yahel

+0

jako notatkę boczną, jej ie8 +, więc byłoby znacznie lepiej off z 'Array.indexOf' http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript -array/143863 # 143863 – naveen

+0

uwaga, że ​​indexOf nie działa w IE6 i 7 – bstakes

2

Jeśli jest ciągiem znaków, można użyć funkcji .split() i .join(), jak również .push():

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

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

Jeśli tak jest już tablicą, można po prostu użyć .push():

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

data.push(add); 

AKTUALIZACJA: Nie odczytałem ostatniego wiersza w celu sprawdzenia duplikatów, najlepszym sposobem, jaki mogę wymyślić, jest pętla:

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

Nie brałeś pod uwagę duplikatów. –

+0

O rany, masz rację. Wtedy prosty, jeśli sprawdzi ... – Ribose

+0

Prawie "prosty". Zobacz komentarze na temat odpowiedzi simjay. –

2

Można również użyć wyrażenia regularnego:

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' 

Och, od jakiegoś naprawdę jak operatorów trójskładnikowych i obfustically krótkiego kodu:

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

Nie jQuery, problemy "podkładki" lub cross-przeglądarki. :-)

Powiązane problemy