С Новым годом! Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
1 / 1 / 2
Регистрация: 28.07.2009
Сообщений: 57

Удаление объектов из массива, содержащихся в другом массиве

18.04.2019, 06:28. Показов 3237. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня есть 2 массива, первый содержит все объекты (примерно 100 000), второй содержит только отсортированные.

Выглядит это примерно так:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
All=[
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"134","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"137","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"138","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"139","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]},
{"id":123,"cid":"66","GROUP_id":"9686","UNIQUE_id":"141","eid":"0","amo":1,"desc":[{"value":"A-b-c-d."}]}
];
 
Sort={
"5362":[[
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"138","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"137","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]}
],[
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"134","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"139","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]}
]]
}
Каким образом, наиболее быстрым и простым, я могу удалить из первого массива те объекты, которые уже содержатся в отсортированных? Смысл: оставить только неотсортированные.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.04.2019, 06:28
Ответы с готовыми решениями:

Удаление из массива элементов, содержащихся в другом массиве
Процедура выполняет удаление тех элементов из массива mas2, которые встречаются в массиве mas1. При попытки компиляции выдает ошибку в...

Рисование всех объектов, содержащихся в массиве
Я создаю игр на SFML C++ и у меня возникла проблема. Допустим у нас массив обьектов класса. class обьекты; Когда отрисовывается обьекты...

Сформировать массив C из элементов массива А, содержащихся в массиве В ровно 2 раза
Добрый. У меня задание: "Даны массивы целых чисел: A и B. Сформировать массив C из элементов массива А, содержащихся в массиве В ровно 2...

5
1 / 1 / 0
Регистрация: 16.04.2019
Сообщений: 9
18.04.2019, 20:47
Я бы собрал в 3ий массив --

JavaScript
1
2
3
4
        for (var a in arr1)
        {
            if (!arr2.includes(a)) arr3.push(a);
        }
0
1 / 1 / 2
Регистрация: 28.07.2009
Сообщений: 57
19.04.2019, 23:47  [ТС]
Sergei1221, С примером выше я получаю ошибку "Sort.includes is not a function"
С более простыми массивами всё работает.

Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    let All=[
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"134","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"137","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]},
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"138","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"139","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]},
        {"id":123,"cid":"66","GROUP_id":"9686","UNIQUE_id":"141","eid":"0","amo":1,"desc":[{"value":"A-b-c-d."}]}
        ];
         
    let Sort={
        "5362":[[
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"138","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"137","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]}
        ],[
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"134","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
        {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"139","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]}
        ]]
        };
 
        for (let i in All) {
            if (!Sort.includes(All[i])) console.log("результат: " + i);
        }


В моем случае можно также использовать для поиска значение свойства UNIQUE_id - двух одинаковых не будет.
0
1 / 1 / 0
Регистрация: 16.04.2019
Сообщений: 9
20.04.2019, 12:56
Ну правильно, потому что Sort это не массив, а Object.
Пробуйте Object.values(Sort) -- вот это будет массив, к нему можно применять includes().
0
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
21.04.2019, 15:47
FiJer, конкретно для представленной вами структуры данных можно так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
let All=[
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"134","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"137","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"138","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
{"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"139","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]},
{"id":123,"cid":"66","GROUP_id":"9686","UNIQUE_id":"141","eid":"0","amo":1,"desc":[{"value":"A-b-c-d."}]}
];
let Sort = {
    "5362":[
        [
            {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"138","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
            {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"137","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]}
        ],
        [
            {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"134","eid":"0","amo":1,"desc":[{"value":"Uh-huh."}]},
            {"id":123,"cid":"66","GROUP_id":"5362","UNIQUE_id":"139","eid":"0","amo":1,"desc":[{"value":"Ah-huh."}]}
        ]
    ]
};
for(let key in Sort)
    Sort[key].forEach(el => el.forEach(elem => All = All.filter(a => JSON.stringify(a) != JSON.stringify(elem))))
FiJer,имейте ввиду: способ не универсальный, просто костыль. При изменении структур данных работать корректно возможно не будет.
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
22.04.2019, 10:40
Здравствуйте.
FiJer, сложность Вашего второго массива Sort в ненормальной трехкратной вложенности данных. Действительно ли так глубоко нужно заворачивать строчки?
Допустим мы сначала sort развернули во временный "плоский" массив tmp.
Потом мы применим известную функцию SQL - except()

Cамое интересное в этой функции вычитания массивов - класс компаратор с методом equals<T>(T obj1, T obj2)

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<!doctype html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <script>
        let all = [
            { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "134", "eid": "0", "amo": 1, "desc": [{ "value": "Uh-huh." }] },
            { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "137", "eid": "0", "amo": 1, "desc": [{ "value": "Ah-huh." }] },
            { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "138", "eid": "0", "amo": 1, "desc": [{ "value": "Uh-huh." }] },
            { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "139", "eid": "0", "amo": 1, "desc": [{ "value": "Ah-huh." }] },
            { "id": 123, "cid": "66", "GROUP_id": "9686", "UNIQUE_id": "141", "eid": "0", "amo": 1, "desc": [{ "value": "A-b-c-d." }] }
        ];
 
        let sort = {
            "5362":
                [
                    [
                        { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "138", "eid": "0", "amo": 1, "desc": [{ "value": "Uh-huh." }] },
                        { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "137", "eid": "0", "amo": 1, "desc": [{ "value": "Ah-huh." }] }
                    ], [
                        { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "134", "eid": "0", "amo": 1, "desc": [{ "value": "Uh-huh." }] },
                        { "id": 123, "cid": "66", "GROUP_id": "5362", "UNIQUE_id": "139", "eid": "0", "amo": 1, "desc": [{ "value": "Ah-huh." }] }
                    ]
                ]
        };
 
        function except(array, array2, /*IEqualityComparer*/ comparer) {
            let resultArray = [];
            if (!comparer) {
                let set = new Set(array2);
 
                for (let element of array)
                    if (!set.has(element)) resultArray.push(element);
            }
            else {
                let set = [];
                for (let element of array2) {
                    let found = false;
                    for (let item of set) {
                        if (comparer.equals(element, item)) {
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                        set.push(element);
                }
                for (let element of array) {
                    let found = false;
                    for (let item of set) {
                        if (comparer.equals(element, item)) {
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                        resultArray.push(element);
                }
            }
            return resultArray;
        }
 
        let tmp = []; // Временный массив, чтобы сделать плоский массив из Sort
        for (let key in sort)
            for (let subArray of sort[key])
                for (let element of subArray)
                    tmp.push(element);
        console.log(tmp);
        let comparer = { equals(a, b) { return (a.UNIQUE_id === b.UNIQUE_id); } }
        let result = except(all, tmp, comparer);
        console.log(result);
    </script>
</body>
</html>
Естественно, библиотечные функции обработки последовательностей лучше поместить в библиотеку и использовать готовые многократно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.04.2019, 10:40
Помогаю со студенческими работами здесь

Даны массивы целых чисел: A[n] и B[m]. Сформировать массив C из элементов массива B, содержащихся в массиве A
Добрый. Даны массивы целых чисел: A и B. Сформировать массив C из элементов массива B, содержащихся в массиве A. Я нашёл пример...

Удаление объектов из массива
Добрый день. Забыл следующее: в некотором объекте в приватной зоне есть массив вида: QList&lt;SomeClass*&gt; data; Когда происходит...

Удаление объектов из массива по id
Подскажите как выполнить следующую задачу. Есть массив id`шников и массив объектов: var idArr = , objArr= Надо...

Элементы, присутствующие в массиве B 1 раз, кроме элементов, содержащихся в массиве A
Что не так? не могу понять Задание: Даны два одномерных массива целых чисел A и В. Вычислить одномерный массив С, который содержит...

Сформировать массив из элементов, содержащихся как в массиве a, так и в массиве b
Условие:Даны три одномерных массива a, b и c разного размера. Сформировать массив из элементов, содержащихся как в массиве a, так и в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru