Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.05.2023, 23:37
Новичок на форуме
Отправить личное сообщение для querubin Посмотреть профиль Найти все сообщения от querubin
 
Регистрация: 03.06.2011
Сообщений: 1

Как преобразовать массив [1,1,Q,1,R] в строку "2Q1R"
Есть массив [1,1,1,Q,1,1,R,1]
Как получить строку вида " 3Q2R1 " т.е. все единицы которые идут подряд - плюсуются;
или, для примера, массив [1,1,N,W,1,1,1,Q] требуемая строка на выходе = " 2NW3Q " (т.е если подряд единицы то они плюсуются).
Неделю копаю, не осилю, помогите пожалуйста. Заранее благодарен!
Ответить с цитированием
  #2 (permalink)  
Старый 09.05.2023, 01:38
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

querubin,
function str_pack(arr) {
  var acc = 0, str = '';
  for( i in arr ){
      if( isNaN(arr[i]) )
          str = str + (acc > 0 ? acc : '') + arr[i],
          acc = 0;
      else
          acc = +arr[i] + acc;
  }
  if( acc > 0 ) str += acc;
  return str;
}
console.log(str_pack([1,1,'Q',1,'R']));
console.log(str_pack([1,1,1,'Q',1,1,'R',1]));
console.log(str_pack([1,1,'N','W',1,1,1,'Q']));

Последний раз редактировалось Белый шум, 09.05.2023 в 01:40.
Ответить с цитированием
  #3 (permalink)  
Старый 09.05.2023, 06:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

querubin ,
function str_pack(arr) {
  return arr.join('').replace(/1+/g, a => a.length)
}
console.log(str_pack([1,1,'Q',1,'R']));
console.log(str_pack([1,1,1,'Q',1,1,'R',1]));
console.log(str_pack([1,1,'N','W',1,1,1,'Q']));
Ответить с цитированием
  #4 (permalink)  
Старый 09.05.2023, 10:59
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

рони,

Респект.
Ответить с цитированием
  #5 (permalink)  
Старый 09.05.2023, 18:47
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

рони, прикольно. Единственный вопрос - что делать в таком случае [1,1,'Q',11,'R'] (если он возможен).)
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 10.05.2023, 12:49
Аватар для Cuntmann
Аспирант
Отправить личное сообщение для Cuntmann Посмотреть профиль Найти все сообщения от Cuntmann
 
Регистрация: 26.01.2014
Сообщений: 78

Бомж-стайл вариант:

function f(ar){
      let res = [0];
	  ar.forEach( n => typeof n == 'number' && typeof res[ res.length - 1 ] == 'number' ? res[ res.length - 1 ] += n : res.push(n) );
	  return res.join('').replace( /^0/, '' );
	  }
	
	console.log( f( [1, 1, 'Q', 1, 'R'] )); //2Q1R
	console.log( f( [1, 1, 1, 'Q', 1, 1, 'R', 1] ) ); // 3Q2R1
	console.log( f( [1, 1, 'N', 'W', 1, 1, 1, 'Q'] ) ); // 2NW3Q
	/*****/
	console.log( f( [1, 11, 'N', 'W', 3, 55 , 0, 'Q'] ) ); // 12NW58Q
	console.log( f( ['A', 1, 21, 'N', 'W', 3, 55, 0, 'Q', 4] ) ); // A22NW58Q4
	console.log( f( ['A','CDE', 1, 21, 'N', 'W', 3, 'Q', 4] ) ); // ACDE22NW3Q4
Ответить с цитированием
  #7 (permalink)  
Старый 10.05.2023, 13:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Cuntmann,

function f(ar) {
            let i = 0;
            for (let n of ar.slice(1)) {
                if (typeof (n + ar[i]) == 'number') ar[i] += n;
                else ar[++i] = n;
            }
            ar.length = ++i;
            return ar.join('');
        }

        console.log(f([1, 1, 'Q', 1, 'R'])); //2Q1R
        console.log(f([1, 1, 1, 'Q', 1, 1, 'R', 1])); // 3Q2R1
        console.log(f([1, 1, 'N', 'W', 1, 1, 1, 'Q'])); // 2NW3Q
        /*****/
        console.log(f([1, 11, 'N', 'W', 3, 55, 0, 'Q'])); // 12NW58Q
        console.log(f(['A', 1, 21, 'N', 'W', 3, 55, 0, 'Q', 4])); // A22NW58Q4
        console.log(f(['A', 'CDE', 1, 21, 'N', 'W', 3, 'Q', 4])); // ACDE22NW3Q4
Ответить с цитированием
  #8 (permalink)  
Старый 10.05.2023, 14:32
Аватар для Cuntmann
Аспирант
Отправить личное сообщение для Cuntmann Посмотреть профиль Найти все сообщения от Cuntmann
 
Регистрация: 26.01.2014
Сообщений: 78

рони,
Ответить с цитированием
  #9 (permalink)  
Старый 10.05.2023, 15:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Подкину и я свои 5коп...

function f(ar) {
	const o = ar.reduce((o, v) => (typeof v === 'number'
		? o.n += v
		: (o.t += (o.n || '') + v, o.n = 0)
	, o), {t: '', n: 0})
	return o.t + (o.n || '')
}
console.log(f([1, 1, 'Q', 1, 'R'])); //2Q1R
console.log(f([1, 1, 1, 'Q', 1, 1, 'R', 1])); // 3Q2R1
console.log(f([1, 1, 'N', 'W', 1, 1, 1, 'Q'])); // 2NW3Q
/*****/
console.log(f([1, 11, 'N', 'W', 3, 55, 0, 'Q'])); // 12NW58Q
console.log(f(['A', 1, 21, 'N', 'W', 3, 55, 0, 'Q', 4])); // A22NW58Q4
console.log(f(['A', 'CDE', 1, 21, 'N', 'W', 3, 'Q', 4])); // ACDE22NW3Q4


Но вариант с регуляркой явно не переплюнуть...

Последний раз редактировалось ksa, 10.05.2023 в 15:44.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать массив из строк в массив из байтов someQuestions Общие вопросы Javascript 3 12.10.2017 13:21
Константный массив, как приватное поле класса AndreyMG Общие вопросы Javascript 0 13.05.2016 17:31
Как преобразовать строку в объект axmed2004 Общие вопросы Javascript 4 20.11.2012 16:02
Как перевести json строку в js массив? Tek Общие вопросы Javascript 1 25.03.2012 17:11
Массив как часть параметра diprom Javascript под браузер 3 21.09.2011 00:08