|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
|
Удаление дублей в массиве24.05.2018, 12:13. Показов 4180. Ответов 41
Метки нет (Все метки)
Помогите скриптом, который бы убирал дубли в массиве.
Массив представляет собой список фамилий и номеров их очередей. Если есть одинаковые фамилии, то повторные (с большим номером очереди) убрать из массива. Как следствие убрать соответствующий фамилии и номер очереди (с уменьшением номера оставшихся если появился пропуск в номерах). Возможные варианты и ожидаемый результат обработки 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
0
|
|
| 24.05.2018, 12:13 | |
|
Ответы с готовыми решениями:
41
Удаление дублей |
|
|
||||||||
| 28.05.2018, 16:51 | ||||||||
ABCD 2223 Удаляем из первого массива A. Как должен измениться список? 223 или 222. То есть у D меняется очередь и он занимает освободившуюся двойку, или надо принять во внимание, что двоек и так достаточно и оставить его на тройке?
1
|
||||||||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
||
| 28.05.2018, 17:01 [ТС] | ||
|
Т.е. в этом случае D имеет очередь следующую после A,B,C - так и должен остаться в очереди после них. Поэтому в результате будет 2,2,3. Это так сказать бизнес логика. А как её в логику кода преобразить - я так понимаю смотреть есть ли у удаляемого элемента такой же номер очереди у предыдущего или последующего элемента - если да, то у оставшихся элементов цифры очереди не меняются. let vf = v[0].filter(function (vv, i, a) { return M1.indexOf(vv) < 0 && a.indexOf(vv) == i }); ERROR SyntaxError: missing ; before statement на символе 17.(выделена жирным)
0
|
||
|
|
|||
| 28.05.2018, 17:08 | |||
|
ALARMus75, Ладно, другой вариант: очереди распределены так 22334. Одну надо удалить, что удаляем двойку или тройку?
Добавлено через 1 минуту Добавлено через 3 минуты
0
|
|||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
|
| 28.05.2018, 17:09 [ТС] | |
|
Компилирует нормально, но при выполнении
строка 3: ERROR TypeError: this.map is not a function на символе 1. Строка 3 это -> return this.map(function (v, i) { return [v, scnd[i]]; });
0
|
|
|
|
|||||||||||
| 28.05.2018, 17:18 | |||||||||||
|
ALARMus75, возможно действительно мэп не поддерживается в твоей версии. Можно добавить таким же способом. Вначале скрипта добавь следующий код
Добавлено через 1 минуту В принципе фильтер можно определить так
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
||
| 28.05.2018, 17:25 [ТС] | ||
|
Так если соответствие такое (памятуя, что в M1 содержится: A): M2=ABCDE M3=22334 то удаляем из М2 первый элемент - А и соответствующий ему первый элемент в М3, то получим М2=BCDE M3=2334 Если же изначально М2=ABCBE M3=22334 Получим М2=BCE M3=234 т.е. следуя принципу оставления последовательности очереди: С должна стоять в очереди после А и В ====================== Во аналогия: Стоит очередь, стали проверять и выяснилось что Петров стоит в очереди в двух местах (2 раза занял), оставить за Петровым только меньший номер очереди, а из остальных его убрать. После того как Петрова убрали из очереди (где он зафиксирован 2-й и более раз) оставшаяся очередь смыкается занимая освободившиеся места. Но бывает что вместе пришли 2 друга Иванов и Сидоров и встали вместе, а не друг за другом (заняли один номер очереди). Прошла такая же проверка и выяснилось, что Сидоров еще в другом месте очереди занимал (один без Иванова) где-то впереди. И вот его дублирующее присутствие в очереди убрали (то что позднее, где он вместе с Ивановым) - при этом очередь не сдвигается - Иванов же на этом месте очереди остался.
0
|
||
|
|
||||||||
| 28.05.2018, 18:33 | ||||||||
|
Добавлено через 57 минут ALARMus75, если так как выше написал, то есть дыры заделываются путем понижения номеров у всех кто после дыры, то это будет выглядеть так
0
|
||||||||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
|||||||
| 29.05.2018, 11:08 [ТС] | |||||||
|
=======
Добавлено через 36 минут Я проанализировал логику по удалению и перенумерации элементов в массиве M3. Получается 3 условия: Если удаляемый элемент массива (т.е. найденный повтор) 1) Последний элемент - ничего не менять (в нумерации) 2) Если значение элемента равно значению предыдущего ИЛИ последующего элемента - ничего не менять (в нумерации) 3) Первый элемент и НЕ равен 2-му - уменьшить на 1 все оставшиеся после него значения элементов массива Добавлено через 6 минут 4) В остальных случаях - уменьшить на 1 все оставшиеся после него значения элементов массива Т.е. объединив по результирующему действию - это 2 условия Добавлено через 26 минут Нашли какой элемент в М2 удалить (перебирая по порядку) Получим такое условие для М3: Удаляемый элемент последний ИЛИ (его значение равно предыдущему ИЛИ следующему значению) То Уменьшить значение всех элементов на 1 после удаляемого В остальных случаях ничего с нумерацией не менять
0
|
|||||||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
|
| 29.05.2018, 11:20 [ТС] | |
|
Вот представил поэтапность обработки Вашей логикой и второй столбец как я это представил
0
|
|
|
|
||||||||||||||||||||||||||||
| 29.05.2018, 11:57 | ||||||||||||||||||||||||||||
Добавлено через 13 минут Кстати говоря, если все элементы такой последовательности сдвинуть к перовому номеру исходной, то, насколько я понимаю получится именно то, о чем ты говоришь. Короче вот так вот, наверное должно быть
1
|
||||||||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
||||||
| 30.05.2018, 12:38 [ТС] | ||||||
|
Забыл указать что я имел ввиду на картинке (пост №29)
Строки из цифр это варианты очередей, которые, мне кажется, учитывают все варианты комбинаций. ============== Ремарочка в рассматриваемом массиве М3 не может быть первого номера очереди - это номер очереди будущих согласующих. Номер один (при первичном создании, когда и надо устранить дубликаты) всегда в таблице М1 - одна или более фамилий с номером один очереди. ============== Заменил 2 последние строки (console.log - не знает такого) на:
Оптимизация массива, результат = 1,2,3,3,3,4,5,5,5,6,7,8,8,8,9,10 M23 = B,C,B,C,B,C,B,C,B,C,B,C,B,C,B,C,D,B,C,B, C,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,4,2,3, 2,3 Добавлено через 9 минут ************* Из описания языка к приложению нашел наличие только этой функции: Since indexOf is not available on Arrays, the array has to be converted to a string before using this function to find if a single element is part of the array. Добавлено через 22 часа 39 минут А как получить исходные массивы М2 и М3 только уже с новыми данными (скорректированными) ?
0
|
||||||
|
|
|||||||
| 30.05.2018, 14:04 | |||||||
1
|
|||||||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
|||||||||||
| 30.05.2018, 17:15 [ТС] | |||||||||||
|
Еще бы теперь понять для себя как все работает в этом скрипте.
![]() Добавлено через 1 час 28 минут Попробовал использовать в своей системе но возникли проблемы. Кликните здесь для просмотра всего текста
Произвожу вызов функции из библиотеки, в которой она создана.
2: undefined 1: B,C,2,3 Добавлено через 6 минут М1 и М2 как и М3 одинаковые массивы (не по значению). т.е. М2 это - ["B","A", "C"] - один из вариантов а остальное это возможные его варианты относительно М1 и М3 Так и М3 это [2,3,4]
0
|
|||||||||||
|
|
||
| 30.05.2018, 17:17 | ||
|
0
|
||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
|
| 30.05.2018, 17:20 [ТС] | |
|
да это исправил (вызов под написанный код и для [[2,3,4]])
Но результат получаю одним массивом из вызываемой функции (подправил предыдущий пост) Можно наверно добавить еще один аргумент вызова функции, а в самой функции указать условие по которому возвращаем либо [0] либо [1] элемент массива
0
|
|
|
|
|||||||||||||||||||||
| 30.05.2018, 17:50 | |||||||||||||||||||||
|
ALARMus75, по какой-то неведомой причине, все упаковывается в еще один массив. Может потом посмотрю в чем дело. А пока можно вывести так
Добавлено через 10 минут ALARMus75, ёпрст, ты ж сам упаковал все в еще один массив. Вот это вот нахрена нужно?
0
|
|||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
||
| 30.05.2018, 21:13 [ТС] | ||
|
А почему первый массив пишем в 1-й паре скобок - ["A"] А остальные в 2-х парах - [["B","A","C"]] и [[1,1,1]] ?
0
|
||
|
|
|
| 30.05.2018, 21:14 | |
|
ALARMus75, А почему ты меня об этом спрашиваешь? Как ты условие поставил, так я и сделал.
0
|
|
|
1 / 1 / 0
Регистрация: 10.02.2014
Сообщений: 98
|
|
| 30.05.2018, 22:37 [ТС] | |
|
Это потому, что объясняя и имел ввиду не то как Вы меня поняли
![]() Все три массива одномерные. Объясняя я показал пример того какие взаимные значения они могут принимать (М2 и М3)
0
|
|
|
|
||||||
| 30.05.2018, 23:09 | ||||||
|
ALARMus75, а я понял, что в массивах 2 и 3 содержится по нескольку блоков. Если они одномерные и то, что я принял за блоки было просто отдельными вариантами, то задача существенно упростилась бы.
1
|
||||||
| 30.05.2018, 23:09 | |
|
Удаление дублей php
Excel - Удаление дублей. Удаление дублей из textBox Удаление дублей по условию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|