Bu dizeye sahibim
'john smith~123 Street~Apt 4~New York~NY~12345'
JavaScript kullanarak, bunu ayrıştırmanın en hızlı yolu nedir?
var name = "john smith";
var street= "123 Street";
//etc...
Bu dizeye sahibim
'john smith~123 Street~Apt 4~New York~NY~12345'
JavaScript kullanarak, bunu ayrıştırmanın en hızlı yolu nedir?
var name = "john smith";
var street= "123 Street";
//etc...
Yanıtlar:
JavaScript String.prototype.split
işlevi ile:
var input = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = input.split('~');
var name = fields[0];
var street = fields[1];
// etc.
JQuery'ye ihtiyacınız yok.
var s = 'john smith~123 Street~Apt 4~New York~NY~12345';
var fields = s.split(/~/);
var name = fields[0];
var street = fields[1];
ECMAScript6'ya göre ES6
, temiz yol dizileri yok etmektir:
const input = 'john smith~123 Street~Apt 4~New York~NY~12345';
const [name, street, unit, city, state, zip] = input.split('~');
console.log(name); // john smith
console.log(street); // 123 Street
console.log(unit); // Apt 4
console.log(city); // New York
console.log(state); // NY
console.log(zip); // 12345
Giriş dizesinde fazladan öğeleriniz olabilir. Bu durumda, geri kalanı için bir dizi almak veya yalnızca yoksaymak için rest işlecini kullanabilirsiniz:
const input = 'john smith~123 Street~Apt 4~New York~NY~12345';
const [name, street, ...others] = input.split('~');
console.log(name); // john smith
console.log(street); // 123 Street
console.log(others); // ["Apt 4", "New York", "NY", "12345"]
Değerler için salt okunur bir referans gerekiyordu ve const
bildirimi kullandım .
ES6'nın tadını çıkarın!
const [name, , unit, ...others] = ...
Bu en basit yol olmasa da, bunu yapabilirsiniz:
var addressString = "~john smith~123 Street~Apt 4~New York~NY~12345~",
keys = "name address1 address2 city state zipcode".split(" "),
address = {};
// clean up the string with the first replace
// "abuse" the second replace to map the keys to the matches
addressString.replace(/^~|~$/g).replace(/[^~]+/g, function(match){
address[ keys.unshift() ] = match;
});
// address will contain the mapped result
address = {
address1: "123 Street"
address2: "Apt 4"
city: "New York"
name: "john smith"
state: "NY"
zipcode: "12345"
}
Yıkım kullanarak ES2015 güncellemesi
const [address1, address2, city, name, state, zipcode] = addressString.match(/[^~]+/g);
// The variables defined above now contain the appropriate information:
console.log(address1, address2, city, name, state, zipcode);
// -> john smith 123 Street Apt 4 New York NY 12345
keys
. İkinci değiştirme işlevi, [^~]+
her farklı parçayı (yani '123 Street', 'Apt 4', vb.) Eşleştirmek için kullanılır ve işlevi her parça için argüman olarak ileterek çağırır. Her çalıştırmada, işlev ilk anahtarı keys dizisinden alır (ayrıca Array.unshift kullanarak kaldırma) ve anahtarı ve parçayı adres nesnesine atar.
Bu gerçekten jQuery için uygun bir görev olmadığından JavaScript'in alt dosyasına veya bölünmesine bakmak isteyeceksiniz .
Eğer Spliter bulunursa o zaman sadece
Böl onu
başka aynı dizeyi döndürür
function SplitTheString(ResultStr) { if (ResultStr != null) { var SplitChars = '~'; if (ResultStr.indexOf(SplitChars) >= 0) { var DtlStr = ResultStr.split(SplitChars); var name = DtlStr[0]; var street = DtlStr[1]; } } }
Gibi bir şey:
var divided = str.split("/~/");
var name=divided[0];
var street = divided[1];
Muhtemelen en kolay olacak
split("~")
ya split(/~/)
ama split("/~/")
. İkincisi sadece bölünür "John/~/Smith"
ve olmazdı "John~Smith"
.
split
Metni bölmek için kullanabilirsiniz .
Alternatif olarak, match
aşağıdaki gibi de kullanabilirsiniz
var str = 'john smith~123 Street~Apt 4~New York~NY~12345';
matches = str.match(/[^~]+/g);
console.log(matches);
document.write(matches);
Normal ifade [^~]+
, hariç tüm karakterlerle ~
eşleşir ve dizideki eşleşmeleri döndürür. Daha sonra eşleşmeleri buradan çıkarabilirsiniz.
str.split();
Firefox'ta çalışmıyor, ancak bu hem Chrome'da hem de Firefox'ta çalıştı.
str.split();
Firefox ve tüm önemli tarayıcılarda çalışır .
Zach bu hakkı vardı .. yöntemini kullanarak da görünüşte "çok boyutlu" bir dizi yapabilirsiniz .. JSFiddle hızlı bir örnek oluşturdum http://jsfiddle.net/LcnvJ/2/
// array[0][0] will produce brian
// array[0][1] will produce james
// array[1][0] will produce kevin
// array[1][1] will produce haley
var array = [];
array[0] = "brian,james,doug".split(",");
array[1] = "kevin,haley,steph".split(",");
JavaScript: Dizeyi Dizi JavaScript Bölmesine Dönüştür
var str = "This-javascript-tutorial-string-split-method-examples-tutsmake."
var result = str.split('-');
console.log(result);
document.getElementById("show").innerHTML = result;
<html>
<head>
<title>How do you split a string, breaking at a particular character in javascript?</title>
</head>
<body>
<p id="show"></p>
</body>
</html>
https://www.tutsmake.com/javascript-convert-string-to-array-javascript/
Bu string.split("~")[0];
işleri hallediyor.
kaynak: String.prototype.split ()
Köri ve fonksiyon kompozisyonunu kullanan bir başka fonksiyonel yaklaşım.
Yani ilk şey bölünmüş işlev olacaktır. Bunu buna "john smith~123 Street~Apt 4~New York~NY~12345"
dönüştürmek istiyoruz["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]
const split = (separator) => (text) => text.split(separator);
const splitByTilde = split('~');
Şimdi özel splitByTilde
fonksiyonumuzu kullanabiliriz . Misal:
splitByTilde("john smith~123 Street~Apt 4~New York~NY~12345") // ["john smith", "123 Street", "Apt 4", "New York", "NY", "12345"]
İlk elemanı elde etmek için list[0]
operatörü kullanabiliriz . Bir first
fonksiyon oluşturalım:
const first = (list) => list[0];
Algoritma: iki nokta üst üste tarafından bölünür ve ardından verilen listenin ilk öğesini alır. Böylece son getName
fonksiyonumuzu oluşturmak için bu fonksiyonları oluşturabiliriz . Aşağıdakilerle bir compose
işlev oluşturma reduce
:
const compose = (...fns) => (value) => fns.reduceRight((acc, fn) => fn(acc), value);
Ve şimdi onu oluşturmak splitByTilde
ve first
işlevleri için kullanmak.
const getName = compose(first, splitByTilde);
let string = 'john smith~123 Street~Apt 4~New York~NY~12345';
getName(string); // "john smith"
//basic url=http://localhost:58227/ExternalApproval.html?Status=1
var ar= [url,statu] = window.location.href.split("=");
Virgülle ilgili bölünme sorusu bu soruya kopyalandığından, bunu buraya ekleyin.
Eğer bir karakterinden bölünür ve aynı zamanda sık sık virgül ile olur karakteri, arkasından gelebilecek ekstra boşluğa işlemek istiyorsanız, kullanabileceğiniz replace
sonra split
bu gibi:
var items = string.replace(/,\s+/, ",").split(',')
Bu kodu kullanın -
function myFunction() {
var str = "How are you doing today?";
var res = str.split("/");
}