javascript - separar - Convertir una cadena separada por comas en una matriz
split javascript ejemplo (10)
Función de retorno
var array = (new Function("return [" + str+ "];")());
su cadena de aceptar y 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 https://jsfiddle.net/7ne9L4Lj/1/
Tengo una cadena separada por comas que quiero convertir en una matriz para que pueda recorrerla.
¿Hay algo incorporado para hacer esto?
Por ejemplo, tengo esta cadena
var str = "January,February,March,April,May,June,July,August,September,October,November,December";
Ahora quiero dividir esto por comas y almacenar en objeto Array
El método split () se utiliza para dividir una cadena en una matriz de subcadenas y devuelve la nueva matriz.
var array = string.split('','');
La división de Hmm es peligrosa, ya que una cadena siempre puede contener una coma, observe lo siguiente:
var myArr = "a,b,c,d,e,f,g,'',''";
result = myArr.split('','');
Entonces, ¿cómo se interpelaría eso? y cual quieres que sea el resultado? una matriz con:
[''a'', ''b'', ''c'', ''d'', ''e'', ''f'', ''g'', ''/''', ''/'''] or
[''a'', ''b'', ''c'', ''d'', ''e'', ''f'', ''g'', '','']
incluso si escapas de la coma tendrías un problema.
Rápidamente juguetearon esto juntos:
(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);
Siéntase libre de usar / editarlo :)
Pase su cadena separada por comas a esta función y devolverá la matriz, y si no se encuentra una cadena separada por comas, devolverá un valor nulo.
function SplitTheString(CommaSepStr) {
var ResultArray = null;
if (CommaSepStr!= null) {
var SplitChars = '','';
if (CommaSepStr.indexOf(SplitChars) >= 0) {
ResultArray = CommaSepStr.split(SplitChars);
}
}
return ResultArray ;
}
Sé que esta pregunta ha sido respondida durante bastante tiempo, pero pensé que mi contribución sería beneficiosa para otros que investigan este tema ...
Aquí hay una función que convertirá una cadena en una matriz, incluso si solo hay un elemento en la lista (sin carácter separador):
function listToAray(fullString, separator) {
var fullArray = [];
if (fullString !== undefined) {
if (fullString.indexOf(separator) == -1) {
fullAray.push(fullString);
} else {
fullArray = fullString.split(separator);
}
}
return fullArray;
}
Úsalo así:
var myString = ''alpha,bravo,charlie,delta'';
var myArray = listToArray(myString, '','');
myArray[2]; // charlie
var yourString = ''echo'';
var yourArray = listToArray(yourString, '','');
yourArray[0]; // echo
Creé esta función porque la split
arroja un error si no hay un carácter separador en la cadena (solo un elemento)
Tenga cuidado si apunta a números enteros, como 1,2,3,4,5. Si pretende utilizar los elementos de su matriz como enteros y no como cadenas después de dividir la cadena, considere convertirlos en tales.
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(",");
añadiendo un bucle como este
for (a in temp ) {
temp[a] = parseInt(temp[a], 10); // Explicitly include base as per Álvaro''s comment
}
devolverá una matriz que contiene enteros, y no cadenas.
Tenga en cuenta que lo siguiente:
var a = "";
var x = new Array();
x = a.split(",");
alert(x.length);
alertará 1
Tuve un problema similar, pero más complejo ya que necesitaba transformar un csv en una matriz de matrices (cada línea es un elemento de la matriz que dentro tiene una matriz de elementos divididos por comas).
La solución más fácil (y más segura, aposté) fue utilizar PapaParse ( http://papaparse.com/ ) que tiene una opción de "no-header" que transforma el csv en una matriz de arrays, además, detectó automáticamente el " , "como mi delimitador.
Además, está registrado en bower, así que solo tuve que:
bower install papa-parse --save
y luego usarlo en mi código de la siguiente manera:
var arrayOfArrays = Papa.parse(csvStringWithEnters), {header:false}).data;
Realmente me gustó.
buena solución para eso
let obj = [''A'',''B'',''C'']
obj.map((c) => { return c. }).join('', '')
var array = string.split('','');
Referencia de MDN , principalmente útil para el comportamiento inesperado del parámetro limit
. (Pista: "a,b,c".split(",", 2)
aparece en ["a", "b"]
, no ["a", "b,c"]
.)