String split возвращает массив с двумя элементами вместо одного
Я не понимаю этого поведения:
var string = 'a,b,c,d,e:10.';
var array = string.split ('.');
Я ожидаю этого:
console.log (array); // ['a,b,c,d,e:10']
console.log (array.length); // 1
но я получаю это:
console.log (array); // ['a,b,c,d,e:10', '']
console.log (array.length); // 2
Почему два элемента возвращаются вместо одного? Как работает split
?
Есть ли другой способ сделать это?
Ответы
Ответ 1
Это правильное и ожидаемое поведение. Учитывая, что вы включили разделитель в строку, функция split (упрощенная) занимает часть слева от разделителя ( "a, b, c, d, e: 10" ) как первый элемент, а часть остальную часть разделителя (пустую строку) в качестве второго элемента.
Если вам действительно интересно, как работает split(), вы можете просмотреть страницы 148 и 149 спецификации ECMA (ECMA 262) в http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
Ответ 2
Вы можете добавить фильтр, чтобы исключить пустую строку.
var string = 'a,b,c,d,e:10.';
var array = string.split ('.').filter(function(el) {return el.length != 0});
Ответ 3
Немного более простая версия @xdazz версии для исключения пустых строк (с помощью ES6 arrow function):
var array = string.split('.').filter(x => x);
Ответ 4
Используйте метод String.split() с методом 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
Ответ 5
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split
сначала отрегулировать конечный период
'a,b,c,d,e:10.'.replace(/\.$/g,''); // gives "a,b,c,d,e:10"
затем разделите строку
var array = 'a,b,c,d,e:10.'.replace(/\.$/g,'').split('.');
console.log(array.length);//1
Ответ 6
Это потому, что строка заканчивается символом .
- второй элемент массива пуст.
Если строка не будет содержать .
вообще, у вас будет нужный массив элементов.
Метод split()
работает так, насколько я могу объяснить простыми словами:
- Посмотрите на данную строку, которая будет разделяться в данной строке. Если не найден, верните один массив элементов со всей строкой.
- Если найдено, повторите эту строку, взяв символы между каждыми двумя вхождениями строки для разделения.
- В случае, если заданная строка начинается с разделимой строки, первый элемент массива результатов будет пустым.
- Если заданная строка заканчивается разделяемой строкой, последний элемент массива результатов будет пустым.
Здесь более технически описано здесь, это почти то же самое для всех браузеров.
Ответ 7
так; [String.prototype] split(separator, limit)
Возврат к нормальному предельному параметру пуст.
"".split(",") // [""]
"a,b,c.".split(".", 1) // ["a,b,c"]
Если бы вы тоже этого не сделали, без предельного параметра. Я думаю, что это обычная операция...
Ответ 8
Ну, split делает то, что он сделал, он разбивает вашу строку. Просто, что вторая часть раскола пуста.
Ответ 9
Поскольку ваша строка состоит из 2 частей:
1: a, b, c, d, e: 10
2: empty
Если вы попытаетесь без точки в конце:
var string = 'a,b,c:10';
var array = string.split ('.');
:
["a,b,c:10"]
Ответ 10
У вас есть строка с одним "." в нем, и когда вы используете string.split('.'), вы получаете массив, содержащий первый элемент со строковым содержимым до "." . символ и второй элемент с содержимым строки после "." - в этом случае пустая строка.
Итак, это нормально. Что вы хотите достичь, используя этот string.split?
Ответ 11
Согласно веб-документам MDN:
Примечание. Когда строка пуста, split() возвращает массив, содержащий одна пустая строка, а не пустой массив. Если строка и разделитель - пустые строки, возвращается пустой массив.
const myString = '';
const splits = myString.split();
console.log(splits);
// ↪ [""]
Ответ 12
попробуйте это
javascript дает два массива с помощью функции split, затем
var Val = "[email protected]";
var mail = Val.split('@');
if(mail[0] && mail[1]) { alert('valid'); }
else { alert('Enter valid email id'); valid=0; }
если оба массива содержат длину больше 0, тогда условие будет истинным