Я думаю, что Комментарий Диего является одной из важных точек модификации.
В качестве еще одной точки модификации: В вашем сценарии после запуска var prenom = oneName(data[i][0])[0]
data[i]
становится undefined
потому что i
из for(i in data){}
используется как глобальный.После запуска var prenom = oneName(data[i][0])[0];
значение i
изменяется в функции regexBuilder()
.Таким образом, я думаю, что ошибка происходит.
Чтобы избежать этой ошибки, как насчет этой модификации?В этой модификации for(i in data){
был изменен на for(var i in data){
.Пожалуйста, подумайте об этом как о двух из нескольких ответов.
Модифицированный скрипт:
users();
function users() {
var data = [['Jean', 'A Marca'], ['Marie', 'A Marca von Machin'], ['Pierre-Philippe', 'A Marca von machin'], ['Charles-Henri', 'Machin von Truc'], ['Franz Albert', 'All\'Arrabiata von truc'], ['Jérôme', 'all\'arrabiata truc'], ['Heinz', 'n\'Goye'], ['Anne-Méry', 'M\'Bala'], ['Angel', 'Di Maria y Fôdes'], ['Herberto', 'Fôdes y Dos Santos']]
var output = [];
for (var i in data) { // or for (var i = 0; i < data.length; i++) { // <--- Modified
var prenom = oneName(data[i][0])[0];
console.log(prenom);
var nom = oneName(data[i][1])[0];
console.log(nom);
}
}
function oneName(nom) {
var particules1 = ['de ', 'di ', 'da ', 'dos ', 'von ', 'del\'', 'dell\'', 'della ', 'el ', 'al ', 'd\'', 'do ', 'du ', 'des ', 'de la ', 'a ', 'all\'', 'l\'', 'n\'', 'm\''];
var particules2 = ['de', 'di', 'da', 'dos', 'von', 'del', 'dell', 'della', 'el', 'al', 'd', 'do', 'du', 'des', 'dela', 'a', 'all' , 'l', 'n', 'm'];
var regex = new RegExp(regexBuilder(particules1), 'gi');
return nom.match(regex);
}
function regexBuilder(listeParticules) {
var regex = '';
for(var i in listeParticules){ // Modified
if(i == listeParticules.length -1){
regex = regex + '(^' + listeParticules[i] + '[a-zA-Z\u00c0-\u024f\u1e00-\u1eff]+)|(^[a-zA-Z\u00c0-\u024f\u1e00-\u1eff\']+)';
}else{
regex = regex + '(^' + listeParticules[i] + '[a-zA-Z\u00c0-\u024f\u1e00-\u1eff]+)|';
}
}
return regex;
}
Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я прошу прощения.