Am o virgulă separate șir care vreau să se transforme într-o matrice, așa că am putea bucla prin ea.
Este ceva built-in pentru a face acest lucru?
De exemplu, am acest șir
var str = "January,February,March,April,May,June,July,August,September,October,November,December";
acum vreau să împărțim acest lucru prin virgulă, și apoi depozitați-l într-o matrice.
var array = string.split(',');
MDN reference, cea mai mare parte utile pentru un eventual comportament neașteptat de "limita" parametru. (Indiciu: "a,b,c".split(",", 2)
vine de la ["o", "b"]
, nu["o", "b,c"]`.)
Ai grija daca esti vizează numere întregi, cum ar fi 1,2,3,4,5. Dacă intenționați să utilizați elementele de matrice ca numere întregi și nu ca siruri de caractere după divizarea șir, ia în considerare transformarea lor în astfel de.
var str = "1,2,3,4,5,6";
var temp = new Array();
// this will return an array with strings "1", "2", etc.
temp = str.split(",");
adăugând o buclă de genul asta
for (a in temp ) {
temp[a] = parseInt(temp[a], 10); // Explicitly include base as per Álvaro's comment
}
va returna un array ce conține numere întregi, și nu siruri de caractere.
Hmm split este periculos imho ca un șir poate conține întotdeauna o virgulă, respectați următoarele:
var myArr = "a,b,c,d,e,f,g,','";
result = myArr.split(',');
Așa cum ți-ar interperate asta? și ce VREI ca rezultatul sa fie? o matrice cu:
['a', 'b', 'c', 'd', 'e', 'f', 'g', '\'', '\''] or
['a', 'b', 'c', 'd', 'e', 'f', 'g', ',']
chiar daca scapi virgula te'd ai o problemă.
Rapid a jucat împreună:
(function($) {
$.extend({
splitAttrString: function(theStr) {
var attrs = [];
var RefString = function(s) {
this.value = s;
};
RefString.prototype.toString = function() {
return this.value;
};
RefString.prototype.charAt = String.prototype.charAt;
var data = new RefString(theStr);
var getBlock = function(endChr, restString) {
var block = '';
var currChr = '';
while ((currChr != endChr) && (restString.value !== '')) {
if (/'|"/.test(currChr)) {
block = $.trim(block) + getBlock(currChr, restString);
}
else if (/\{/.test(currChr)) {
block = $.trim(block) + getBlock('}', restString);
}
else if (/\[/.test(currChr)) {
block = $.trim(block) + getBlock(']', restString);
}
else {
block += currChr;
}
currChr = restString.charAt(0);
restString.value = restString.value.slice(1);
}
return $.trim(block);
};
do {
var attr = getBlock(',', data);
attrs.push(attr);
}
while (data.value !== '');
return attrs;
}
});
})(jQuery);
Simțiți-vă liber pentru a utiliza / edita :)
Rețineți că următoarele:
var a = "";
var x = new Array();
x = a.split(",");
alert(x.length);
va alerta 1
Trece Separate prin virgulă șir în această funcție și se va reveni matrice, și dacă nu separate prin virgulă șir găsit apoi se va întoarce null.
function SplitTheString(CommaSepStr) {
var ResultArray = null;
if (CommaSepStr!= null) {
var SplitChars = ',';
if (CommaSepStr.indexOf(SplitChars) >= 0) {
ResultArray = CommaSepStr.split(SplitChars);
}
}
return ResultArray ;
}
var array = (new Function("return [" + str+ "];")());
sa accepte șir și objectstrings
var string = "0,1";
var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';
var stringArray = (new Function("return [" + string+ "];")());
var objectStringArray = (new Function("return [" + objectstring+ "];")());
JSFiddle
Știu că această întrebare s-a răspuns pentru un timp destul, dar m-am gândit că contribuția mea ar fi benefic pentru alții cercetarea acestui subiect...
Aici este o funcție care va converti un șir de caractere la o serie, chiar dacă există doar un singur element din listă (fără caracter separator):
function listToAray(fullString, separator) {
var fullArray = [];
if (fullString !== undefined) {
if (fullString.indexOf(separator) == -1) {
fullAray.push(fullString);
} else {
fullArray = fullString.split(separator);
}
}
return fullArray;
}
Utilizați ca aceasta:
var myString = 'alpha,bravo,charlie,delta';
var myArray = listToArray(myString, ',');
myArray[2]; // charlie
var yourString = 'echo';
var yourArray = listToArray(yourString, ',');
yourArray[0]; // echo
Am creat această funcție pentru că "split" aruncă o eroare dacă nu există nici un caracter separator în șir (un singur element)
Am avut o problemă similară, dar mult mai complex ca am nevoie pentru a transforma un fișier csv într-o serie de tablouri (fiecare linie este un element de matrice care are în interior o serie de elemente despărțite prin virgulă).
Soluția cea mai ușoară (și mai sigur, pun pariu) a fost de a utiliza PapaParse (http://papaparse.com/), care are o "nu-header" opțiune care transforma csv într-o serie de tablouri, în plus, este detectat în mod automat "," ca delimitator.
În Plus, acesta este înregistrat în bower, asa ca am avut doar să:
bower install papa-parse --save
și apoi să-l utilizați în cod, după cum urmează:
var arrayOfArrays = Papa.parse(csvStringWithEnters), {header:false}).data;
Mi-a placut.
let str = "January,February,March,April,May,June,July,August,September,October,November,December"
let arr = str.split(',');
rezultatul va fi:
["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
și, dacă doriți pentru a converti următoarele:
["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
asta:
"January,February,March,April,May,June,July,August,September,October,November,December";
utilizare:
str = arr.join(',')
soluție bună pentru că
let obj = ['A','B','C']
obj.map((c) => { return c. }).join(', ')