Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.06.2018, 11:51
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Разобрать строку
Добрый день. Помогите разобрать объект.
var object = [{name: 'Иванов А.Г. (тут)', obj: ''}, {name: 'Сидоров  И.М.', obj: ''}, ];


Если после символов (например 'Иванов А.Г.') есть еще что то, перенести это что то из name в obj. А в name написать то что осталось

Например:
// было
var object = [{name: 'Иванов А.Г. (тут)', obj: ''}, {name: 'Сидоров  И.М.', obj: ''},... ];

//произвели манипуляцию 
for (var i = 0; i < object .length; i++) {
     if(object[i].name.match( /\.?\./gi )){
           object[i].name =... // например Иванов А.Г.
           object[i].obj = ...  // например (тут)
     };
}

//и на выходе получили такой объект
var object = [{name: 'Иванов А.Г.', obj: '(тут)'}, {name: 'Сидоров  И.М.', obj: ''}, ];


Думал выловить две точки, что то типо [/\.?\./gi ] но что то недошло до меня как правильно
Ответить с цитированием
  #2 (permalink)  
Старый 13.06.2018, 12:05
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

Artur_Hopf,
попробуйте так:
var object = [{name: 'Иванов А.Г. (тут)', obj: ''}, {name: 'Сидоров  И.М.', obj: ''}];

//произвели манипуляцию
for (var i = 0; i < object.length; i++) {
  var fio = object[i].name.match(/.+\..\./gi);
  if (fio) {
    object[i].obj = object[i].name.replace(fio[0], '').trim();
    object[i].name = fio[0];
  }
}
console.log(object)
Ответить с цитированием
  #3 (permalink)  
Старый 13.06.2018, 12:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Artur_Hopf, лучше внесите изменения в скрипт, который генерирует исходные данные.
Иначе получается, что вы сначала создаете себе проблемы, потом их героически решаете.
Ответить с цитированием
  #4 (permalink)  
Старый 13.06.2018, 12:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Artur_Hopf,
// было
var object = [{name: 'Иванов А.Г. (тут)', obj: ''}, {name: 'Сидоров  И.М.', obj: ''} ];

var object = object.map(function(el) {
var arr = el.name.split(/\.\s+/);
return arr[1] && arr[1].trim() ? {name: arr[0]+".", obj: arr[1]} : el
})
console.log(object)
//и на выходе получили такой объект
//var object = [{name: 'Иванов А.Г.', obj: '(тут)'}, {name: 'Сидоров  И.М.', obj: ''}, ];
Ответить с цитированием
  #5 (permalink)  
Старый 13.06.2018, 12:23
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Nexus,
Этот массив это xml фаил, его надо обработать.

рони,
Спасибо большое
Ответить с цитированием
  #6 (permalink)  
Старый 13.06.2018, 13:10
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

рони,
Подскажи пожалуйста, это регулярное выражение ищет именно символ после точки с пробелом /\.\s+/
А как сделать чтобы отсеивалось именно после двух точек? именно после символ. символ. Навроде (Екимов А.'может быть пробел' М.).
Ответить с цитированием
  #7 (permalink)  
Старый 13.06.2018, 13:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

var object = [{name: 'Иванов А.Г. (тут)', obj: ''}, {name: 'Сидоров  И. М.', obj: ''} ];

object.forEach(function(o) {
  var match = o.name.match(/^\s*([А-ЯЁ]\S+)\s+([А-ЯЁ])\s*\.\s*([А-ЯЁ])\s*\.\s*([\s\S]*?)\s*$/)
  if(match){
    if(match[4]){
      o.obj = match[4];
    }
    o.name = match[1] + ' ' + match[2] + '.' + match[3] + '.';
  }
});

alert(JSON.stringify(object, 0, 4))

Заодно приводит к одному виду.)
__________________
29375, 35

Последний раз редактировалось Aetae, 13.06.2018 в 13:34.
Ответить с цитированием
  #8 (permalink)  
Старый 13.06.2018, 13:35
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Aetae,
А если так:
[А-Я][а-я]+\s+[А-Я]\.\s+[А-Я]\.|[А-Я][а-я]+\s+[А-Я]\.[А-Я]\.

сплитить?
Ответить с цитированием
  #9 (permalink)  
Старый 13.06.2018, 13:37
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

Artur_Hopf, суть в том, что фамилия может быть напимер Безденок-Кржижепольский или там О’Коннор, потому чтоб не ломать голову над всеми вариантами, сделал просто "непробел": \S.
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 13.06.2018, 13:39
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Aetae,
Сейчас попробую, спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать строку в шаблонную строку (template literals) daima Элементы интерфейса 5 01.09.2017 17:14
Зачеркнуть строку в таблице myshara (X)HTML/CSS 2 16.10.2014 17:28
Вставить значение переменных в строку someone Общие вопросы Javascript 2 03.11.2013 00:14
float-переменная преобразуется в строку с запятой EugenyK Firefox/Mozilla 4 03.08.2013 06:22
Разобрать строку по байтам, а не по символам? andryshik Общие вопросы Javascript 0 22.09.2008 13:02