2012-02-03 7 views

risposta

233
var streetaddress= addy.substr(0, addy.indexOf(',')); 

Anche se non è il migliore posto per definitivo in la formazione su cosa fa ogni metodo (mozilla developer network è meglio per questo) w3schools.com è buono per introdurre la sintassi.

+140

Non c'è bisogno di essere paternalistico. – naomi

+16

Questo non funzionerà se la stringa ricercata non contiene un'istanza del carattere di ricerca. Restituirà una stringa vuota. –

+0

Per David G, vedere https://jsfiddle.net/13pkp1xn/ –

3
var newString = string.substr(0,string.indexOf(',')); 
19

provare questo:

streetaddress.substring(0, streetaddress.indexOf(',')); 
+0

Perché nessun amore per la mia risposta? Se questa risposta è corretta http://stackoverflow.com/questions/3745515/what-is-the-difference-between-substr-and-substring la mia risposta è precisa come la risposta accettata, e funziona per l'avvio di indici diversi da 0 –

+3

Come sottolineato da David G sopra, probabilmente perché non funziona se non c'è una virgola.L'OP potrebbe aver implicato che la stringa avrebbe sempre una virgola, ma in molti casi il delimitatore non è garantito. Vedi https://jsfiddle.net/13pkp1xn/ –

12

Se ti piace breve è sufficiente utilizzare un RegExp:

var streetAddress = /[^,]*/.exec(addy)[0]; 
+1

C'è qualcosa che non va Questo? – flu

+4

+1, penso che questo sia un metodo ragionevole, ma ho preso un suggerimento da questo e sono andato con 'addy.split (',', 1) [0]' – antak

+3

Questo metodo è molto bello per esempio se si desidera dividere su spazio bianco:/[^ \ s] * /. exec (...) – NuSkooler

3

Se si desidera tornare stringa originale intatto se non contiene il carattere di ricerca quindi è possibile utilizzare una funzione anonima (una chiusura):

var streetaddress=(function(s){var i=s.indexOf(','); 
    return i==-1 ? s : s.substr(0,i);})(addy); 

questo può essere reso più generico:

var streetaddress=(function(s,c){var i=s.indexOf(c); 
    return i==-1 ? s : s.substr(0,i);})(addy,','); 
89
var streetaddress = addy.split(',')[0]; 
+1

altalene e rotonde: crea inutilmente un array, ma funziona almeno se il carattere di arresto non è nella stringa – Alnitak

+1

Per il confronto delle prestazioni, vedere: https://jsperf.com/street-array-vs-substr – FrankerZ

6

quasi la stessa cosa della risposta di David G ma senza la funzione anonima, se non si ha voglia di includerne una.

s = s.substr(0, s.indexOf(',') === -1 ? s.length : s.indexOf(',')); 

in questo caso ci avvaliamo del fatto che il secondo argomento di substr è una lunghezza, e che sappiamo che la nostra stringa sta cominciando a 0.

la risposta superiore è non è una soluzione generica a causa del comportamento indesiderato se la stringa non contiene il carattere che si sta cercando.

se si vuole un comportamento corretto in un caso generico, utilizzare questo metodo o il metodo di David G, non è la risposta superiore

regex e split metodi saranno anche funzionare, ma potrebbe essere un po 'più lento/eccessivo per questo problema specifico.

10
//split string into an array and grab the first item 

var streetaddress = addy.split(',')[0]; 

Inoltre, consiglierei di denominare le variabili con Camel-Case (streetAddress) per una migliore leggibilità.

+0

Questo è migliore del metodo using indexof, nello scenario in cui non è presente il carattere virgola –

+0

È possibile salvare qualche elaborazione e interrompere la divisione al primo ", "trovato utilizzando ciò che @antak ha pubblicato come commento in https://stackoverflow.com/a/22386366/601386:' addy.split (',', 1) [0] '. Vedi https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split. – flu

Problemi correlati