Подсчет запятых в строке с помощью Javascript (AngularJS/Lodash)

У меня довольно специфическая проблема.

Я использую ng-csv, и поскольку он не поддерживает вложенные массивы, я превращаю массив в строку.

Что-то вроде этого:

[
 {"name":"Maria","chosen":false},
 {"name":"Jenny","chosen":false},
 {"name":"Ben","chosen":false},
 {"name":"Morris","chosen":false}
]

Превращается в:

$scope.var = "Maria, Jenny, Ben, Morris"

Моя проблема в том, что когда я использовал массив, я мог подсчитать количество имен в массиве (что мне нужно по причинам пользовательского интерфейса), но со строкой это становится сложно.

По сути, я не могу сосчитать количество слов, потому что некоторые имена могут включать фамилию, но я думал, что смогу посчитать запятые, а затем добавить 1.

Любые указатели на то, как это сделать?


person Eric Mitjans    schedule 22.12.2014    source источник


Ответы (3)


Если вам нужны сами имена - вы можете использовать метод split класса String:

var str = "Maria, Jenny, Ben, Morris";
var arr = str.split(','); // ["Maria", " Jenny", " Ben", " Morris"]
var count = arr.length; // 4
person Kiril    schedule 22.12.2014
comment
Благодаря вашему решению я понял, что могу подсчитывать имена до преобразования массива, который у меня уже был, в строку :) - person Eric Mitjans; 22.12.2014

var str = "Maria, Jenny, Ben, Morris";
var tokens = str.split(",");

Количество токенов должно быть зафиксировано в tokens.length. В качестве альтернативы, если вам на самом деле не нужно работать с токенами напрямую:

var nameCount = str.split(",").length;
person rchang    schedule 22.12.2014

Почему бы не использовать регулярное выражение?

var _string = "Mary, Joe, George, Donald";

_string.match(/,/g).length // 3
person webkit    schedule 23.01.2017