Je ne comprends pas ce comportement:
var string = 'a,b,c,d,e:10.';
var array = string.split ('.');
J'attends ceci:
console.log (array); // ['a,b,c,d,e:10']
console.log (array.length); // 1
mais je comprends ceci:
console.log (array); // ['a,b,c,d,e:10', '']
console.log (array.length); // 2
Pourquoi deux éléments sont renvoyés au lieu d'un? Comment fonctionne split
?
Y a-t-il une autre façon de faire cela?
C'est le comportement correct et attendu. Etant donné que vous avez inclus le séparateur dans la chaîne, la fonction split (simplifiée) prend la partie à gauche du séparateur ("a, b, c, d, e: 10") en tant que premier élément et la partie à le reste du séparateur (une chaîne vide) en tant que deuxième élément.
Si vous êtes vraiment curieux de savoir comment split () fonctionne, vous pouvez consulter les pages 148 et 149 des spécifications ECMA (ECMA 262) à l’adresse http://www.ecma-international.org/publications/files/ECMA- ST/Ecma-262.pdf
Vous pouvez ajouter un filtre pour exclure la chaîne vide.
var string = 'a,b,c,d,e:10.';
var array = string.split ('.').filter(function(el) {return el.length != 0});
Une version légèrement plus facile de version @xdazz pour exclure les chaînes vides (avec fonction de flèche ES6 ):
var array = string.split('.').filter(x => x);
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split
couper la période de fuite en premier
'a,b,c,d,e:10.'.replace(/\.$/g,''); // gives "a,b,c,d,e:10"
puis diviser la chaîne
var array = 'a,b,c,d,e:10.'.replace(/\.$/g,'').split('.');
console.log (array.length); // 1
Utilisez la méthode String.split () avec la méthode 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
En effet, la chaîne se termine par le caractère .
- le deuxième élément du tableau est vide.
Si la chaîne ne contient pas du tout .
, vous aurez le tableau d'un élément souhaité.
La méthode split()
fonctionne comme ceci aussi loin que je puisse l'expliquer avec des mots simples:
C'est expliqué plus techniquement ici , c'est à peu près pareil pour tous les navigateurs.
alors; [String.prototype] split(separator, limit)
retourner au paramètre de limite normale est vide.
"".split(",") // [""]
"a,b,c.".split(".", 1) // ["a,b,c"]
Si vous ne pouviez pas le faire aussi, sans paramètre de limite. Je pense que c'est une opération normale ...
Eh bien, split fait ce qu’il a été conçu, il divise votre chaîne. Juste que la deuxième partie de la scission est vide.
Parce que votre chaîne est composée de 2 parties:
1: a, b, c, d, e: 10
2: vide
Si vous essayez sans le point à la fin:
var string = 'a,b,c:10';
var array = string.split ('.');
la sortie est:
["a,b,c:10"]
Vous avez une chaîne avec un "." et lorsque vous utilisez string.split ('.'), vous recevez un tableau contenant le premier élément avec le contenu de la chaîne avant "." caractère et le deuxième élément avec le contenu de la chaîne après le "." - qui est dans ce cas une chaîne vide.
Donc, ce comportement est normal. Que vouliez-vous réaliser en utilisant ce string.split?