javascript - soljson - smart contracts ethereum
La división de cadenas devuelve una matriz con dos elementos en lugar de uno (11)
No entiendo este comportamiento:
var string = ''a,b,c,d,e:10.'';
var array = string.split (''.'');
Espero esto:
console.log (array); // [''a,b,c,d,e:10'']
console.log (array.length); // 1
pero entiendo esto
console.log (array); // [''a,b,c,d,e:10'', '''']
console.log (array.length); // 2
¿Por qué se devuelven dos elementos en lugar de uno? ¿Cómo funciona la split
?
Hay otra manera de hacer esto?
Bueno, split hace lo que está hecho para hacer, divide tu cadena. Solo que la segunda parte de la división está vacía.
Debido a que su cadena se compone de 2 partes:
1: a, b, c, d, e: 10
2: vacío
Si lo intentas sin el punto al final:
var string = ''a,b,c:10'';
var array = string.split (''.'');
la salida es:
["a,b,c:10"]
Eso es porque la cadena termina con el .
carácter: el segundo elemento de la matriz está vacío.
Si la cadena no contendrá .
en absoluto, tendrá la matriz de un elemento deseado.
El método split()
funciona así hasta donde puedo explicarlo con palabras simples:
- Busque la cadena dada para dividir en la cadena dada. Si no se encuentra, devuelve una matriz de elementos con toda la cadena.
- Si se encuentra, itera sobre la cadena dada tomando los caracteres entre cada dos ocurrencias de la cadena para dividir por.
- En caso de que la cadena dada comience con la cadena a dividir, el primer elemento de la matriz de resultados estará vacío.
- En caso de que la cadena dada termine con la cadena para dividir, el último elemento de la matriz de resultados estará vacío.
Se explica más técnicamente https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split , es prácticamente lo mismo para todos los navegadores.
Este es el comportamiento correcto y esperado. Dado que ha incluido el separador en la cadena, la función de división (simplificada) toma la parte a la izquierda del separador ("a, b, c, d, e: 10") como el primer elemento y la parte a El resto del separador (una cadena vacía) como segundo elemento.
Si realmente tiene curiosidad acerca de cómo funciona split (), puede consultar las páginas 148 y 149 de la especificación ECMA (ECMA 262) en http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Podría agregar un filtro para excluir la cadena vacía.
var string = ''a,b,c,d,e:10.'';
var array = string.split (''.'').filter(function(el) {return el.length != 0});
Tienes una cadena con una ". en él y cuando usa string.split (''.'') recibe una matriz que contiene el primer elemento con el contenido de la cadena antes de "." carácter y el segundo elemento con el contenido de la cadena después de "." - que es en este caso cadena vacía.
Por lo tanto, este comportamiento es normal. ¿Qué querías lograr usando esta string.split?
Una versión ligeramente más fácil de la versión @xdazz para excluir cadenas vacías (usando la función de flecha ES6 ):
var array = string.split(''.'').filter(x => x);
Utilice el método Array.filter() con el método Array.filter() .
var string = ''a,b,c,d,e:10.'';
var array = string.split (''.'').filter(item => item);
console.log(array); // [a,b,c,d,e:10]
console.log (array.length); // 1
asi que; [String.prototype] split(separator, limit)
volver al parámetro límite normal está vacío.
"".split(",") // [""]
"a,b,c.".split(".", 1) // ["a,b,c"]
Si no pudieras haber hecho esto también, sin parámetro límite. Creo que esta es una operación normal ...
prueba esto
javascript da dos matrices por función de división, entonces
var Val = "[email protected]";
var mail = Val.split(''@'');
if(mail[0] && mail[1]) { alert(''valid''); }
else { alert(''Enter valid email id''); valid=0; }
si ambos arreglos contienen una longitud mayor que 0, entonces la condición será verdadera
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split
recortar el período final primero
''a,b,c,d,e:10.''.replace(//.$/g,''''); // gives "a,b,c,d,e:10"
luego divide la cuerda
var array = ''a,b,c,d,e:10.''.replace(//.$/g,'''').split(''.'');
console.log (array.length); // 1