lista wygląda następująco:liczba Dołącz do przecinek oddzielone listy
3434,346,1,6,46
Jak mogę dołączyć do niego numer z javascript, ale tylko wtedy, gdy nie istnieją już w nim?
lista wygląda następująco:liczba Dołącz do przecinek oddzielone listy
3434,346,1,6,46
Jak mogę dołączyć do niego numer z javascript, ale tylko wtedy, gdy nie istnieją już w nim?
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.
'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
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
uwaga, że indexOf nie działa w IE6 i 7 – bstakes
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
}
Nie brałeś pod uwagę duplikatów. –
O rany, masz rację. Wtedy prosty, jeśli sprawdzi ... – Ribose
Prawie "prosty". Zobacz komentarze na temat odpowiedzi simjay. –
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. :-)
Jeszcze raz przestań pisać tagi w swoich tytułach. –