Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.05.2018, 12:01
Новичок на форуме
Отправить личное сообщение для ALARMus Посмотреть профиль Найти все сообщения от ALARMus
 
Регистрация: 06.01.2012
Сообщений: 3

Удаление дублей в массиве
Помогите скриптом, который бы убирал дубли в массиве.
Массив представляет собой список фамилий и номеров их очередей.
Если есть одинаковые фамилии, то повторные (с большим номером очереди) убрать из массива. Как следствие убрать соответствующий фамилии и номер очереди (с уменьшением номера оставшихся если появился пропуск в номерах).
Возможные варианты и ожидаемый результат обработки

A,1,A,2,B,3,C,4 =-> A,1,B,2,C,3

A,1,B,2,A,2,C,3 =-> A,1,B,2,C,3

A,1,A,1,B,2,C,3 =-> A,1,B,2,C,3

A,1,B,2,A,3,C,4 =-> A,1,B,2,C,3

A,1,B,2,C,3,A,4 =-> A,1,B,2,C,3

Последний раз редактировалось ALARMus, 24.05.2018 в 12:04.
Ответить с цитированием
  #2 (permalink)  
Старый 24.05.2018, 12:09
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 2,080

Так?
const array='A,1,A,2,B,3,C,4'.split(',').filter(function(value, index, self) {
    return self.indexOf(value) === index;
});
alert(array.join(','));


upd. не так. Понял что нужно.

Последний раз редактировалось Nexus, 24.05.2018 в 12:46.
Ответить с цитированием
  #3 (permalink)  
Старый 24.05.2018, 12:22
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 443

исходный массив может быть таким?
A,3,B,1

т.е. номера могут быть не по возрастанию?

(если исходно расположены по возрастанию, то можно решить более компактно и экономично. А если нет, то понадобится дополнительный массив объектов и его сортировка. Ну и, конечно, структура данных весьма спорная, массив объектов был бы удобнее)

Последний раз редактировалось Alexandroppolus, 24.05.2018 в 12:29.
Ответить с цитированием
  #4 (permalink)  
Старый 24.05.2018, 12:51
Новичок на форуме
Отправить личное сообщение для ALARMus Посмотреть профиль Найти все сообщения от ALARMus
 
Регистрация: 06.01.2012
Сообщений: 3

Сообщение от Alexandroppolus Посмотреть сообщение
исходный массив может быть таким?
A,3,B,1

т.е. номера могут быть не по возрастанию?
Нет - исходный массив таким не может быть. Последовательность отсортирована по номерам очереди и пропусков номеров изначально нет, есть разве что повторы номеров очереди. Но избавиться надо от дублей Фамилий.

Последний раз редактировалось ALARMus, 24.05.2018 в 13:01.
Ответить с цитированием
  #5 (permalink)  
Старый 24.05.2018, 13:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 23,805

ALARMus,
<script>
var array='A,1,A,2,B,3,C,4'.split(',');
function fn(array)
{
var res = [], n = 1, obj = {};
for (var i = 0; i < array.length; i+=2) {
    var f = array[i];
    if(!obj[f]){
       res.push(f, n++ );
       obj[f] = true;

    }
}
return res
}

document.write(JSON.stringify(fn(array)))
  </script>
Ответить с цитированием
  #6 (permalink)  
Старый 24.05.2018, 13:02
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 2,080

var array='A,1,A,2,B,3,C,4'.replace(/\d+?/g,'').split(',').reduce(function(res,item,index,list){
	if(!!item && list.indexOf(item) === index)
		res.push(item,res.length/2+1);

	return res;
},[]);
alert(array.join(','));
Ответить с цитированием
  #7 (permalink)  
Старый 24.05.2018, 13:08
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 443

function removeDoubles(src, target) {
  target = target || [];
  var names = Object.create(null);
  var pos = 0, qnum = 0;
  for (var i = 0, len = src.length; i < len; i += 2) {
    if (!names[src[i]]) {
      names[src[i]] = true;
      target[pos++] = src[i];
      target[pos++] = ++qnum;
    }
  }
  target.length = pos;
  return target;
}

var arr = 'A,1,B,2,C,3,A,4'.split(',');

alert(removeDoubles(arr).join(','));


если надо удалить дубли в исходном массиве, то removeDoubles(arr, arr)
Ответить с цитированием
  #8 (permalink)  
Старый 24.05.2018, 13:59
Новичок на форуме
Отправить личное сообщение для ALARMus Посмотреть профиль Найти все сообщения от ALARMus
 
Регистрация: 06.01.2012
Сообщений: 3

Спасибо.
Буду думать как теперь это адаптировать в свой javascript.

Потому как у меня не alert, а print. Массив задается так - var array = new Array("A,1,A,2,B,3,C,4") и запятые выискивать не надо, т.к. это разделены элементы массива, а не в виде строки показано значение...

Последний раз редактировалось ALARMus, 24.05.2018 в 14:19.
Ответить с цитированием
  #9 (permalink)  
Старый 24.05.2018, 14:48
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 257

Сообщение от ALARMus Посмотреть сообщение
Последовательность отсортирована по номерам очереди и пропусков номеров изначально нет, есть разве что повторы номеров очереди.
Тогда можно ещё так:
function normalize(order) {
	return Array.from(new Set(
		order
			.split(/,\d+(?:,|$)/)
			.slice(0, -1)),
		(s, i) => [s, i + 1].join(",")
	).join(",");
}

alert(normalize("A,1,A,2,B,3,C,4"));


Сообщение от ALARMus Посмотреть сообщение
var array = new Array("A,1,A,2,B,3,C,4")
Ну так это не массив в массиве, а строка в массиве.
normalize(array[0]);

Последний раз редактировалось Malleys, 24.05.2018 в 14:57.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление всех &nbsp; из текста (поиск и удаление любого слова из текста) Stenli jQuery 5 28.06.2017 19:47
Проверить, есть ли значение переменной "a" в массиве "b" mav1 jQuery 6 18.03.2016 16:24
автоматическое удаление скоупа директивы при удаление dom узла FanAizu Angular.js 0 25.08.2015 21:38
Динамическое удаление строк таблицы Tankist Events/DOM/Window 16 03.07.2013 15:42
Поиск в массиве, частичное совпадение фонарик Общие вопросы Javascript 25 04.04.2013 06:43