web-dev-qa-db-fra.com

Le fractionnement de chaîne renvoie un tableau avec deux éléments au lieu d'un

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?

30
Wilk

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

17
Ingo

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});
71
xdazz

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);
17
marmor

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

2
chim

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

2
Rohit Jindal

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:

  1. Recherchez la chaîne donnée à scinder dans la chaîne donnée. Si non trouvé, retourne un tableau d’éléments avec toute la chaîne.
  2. Si trouvé, itère sur la chaîne donnée en prenant les caractères entre chaque deux occurrences de la chaîne à scinder.
  3. Si la chaîne donnée commence par la chaîne à diviser, le premier élément du tableau de résultats sera vide.
  4. Si la chaîne donnée se termine par la chaîne à diviser, le dernier élément du tableau de résultats sera vide.

C'est expliqué plus techniquement ici , c'est à peu près pareil pour tous les navigateurs.

1
Shadow Wizard

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 ...

1
Yaşar İÇLİ

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.

0
w01k3

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"]
0
MyBoon

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?

0
Miljan Vranic