Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
39 / 9 / 1
Регистрация: 16.02.2018
Сообщений: 251

Объединить ключи объекта если равны их свойства

27.12.2019, 14:35. Показов 3403. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть объект
JavaScript
1
2
3
4
5
6
let obj = {
    a: ['a', 'b'],
    b: ['a'],
    c: ['a', 'b'],
    d: ['a']
}
Как сделать, чтобы при одинаковых свойствах, все ключи объединялись в один и использовали одно общее свойство?

Чтобы после выполнения кода объект превращался в такой:
JavaScript
1
2
3
4
let obj = {
    ac: ['a', 'b'],
    bd: ['a'],
}
Заранее спасибо! Бьюсь уже вторые сутки, не могу найти решение задачи.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.12.2019, 14:35
Ответы с готовыми решениями:

Если числа равны, то каждое число удвоить, а если не равны, то разделить на 2
даны числа а и в.Если числа равны, то каждое число удвоить,а если не равны, то разделить на 2.

Если числа не равны, то заменить меньшее из них большим, а если равны — заменить нулями
Даны целые числа m и n. Если числа не равны, то заменить меньшее из них большим, а если равны - заменить нулями.

Если числа не равны, то заменить меньшее из них большим, а если равны — заменить нулями
Даны целые числа m и n. Если числа не равны, то заменить меньшее из них большим, а если равны - заменить нулями. Написал код: Program...

6
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
27.12.2019, 17:32
Лучший ответ Сообщение было отмечено Пурыга Никита как решение

Решение

Пурыга Никита, идея такая
JavaScript
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
function equal(a, b) {
  if (a === b) return true;
 
  const aProps = Object.getOwnPropertyNames(a);
  const bProps = Object.getOwnPropertyNames(b);
 
  if (aProps.length != bProps.length) {
    return false;
  }
 
  for (let i = 0; i < aProps.length; i++) {
    const propName = aProps[i];
    if (!equal(a[propName], b[propName])) {
      return false;
    }
  }
 
  return true;
}
 
function join(obj) {
  const result = [];
 
  for (let key in obj) {
    const idx = result.findIndex(([prop, val]) => {
      return equal(obj[key], val);
    });
 
    if (idx == -1) {
      result.push([key, obj[key]]);
    } else {
      const [prop, val] = result[idx];
      result[idx] = [prop + key, val];
    }
  }
  return Object.fromEntries(result);
}
 
console.log(
  join({
    a: ["a", "b"],
    b: ["a"],
    c: ["a", "b"],
    d: ["a"]
  })
);
2
39 / 9 / 1
Регистрация: 16.02.2018
Сообщений: 251
27.12.2019, 21:13  [ТС]
Если честно от просто готового кода мне нет смысла) можно узнать логику скрипта?)) немного не понимаю некоторые моменты. Просто я хочу знать и понимать)
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
27.12.2019, 22:19
Цитата Сообщение от Пурыга Никита Посмотреть сообщение
можно узнать логику скрипта?
JavaScript уже вырос из младенческого состояния и потихоньку превращается в нормальный язык программирования.

В функции join(obj) shvyrevvg эмулирует коллекцию Dictionary из C#. То есть коллекцию пар ключ-значение.
https://metanit.com/sharp/tutorial/4.9.php

А в функции equal(a, b) shvyrevvg эмулирует внешний компаратор для значений Dictionary, то есть реализует интерфейс IEqualityComparer. - Для внешнего класса, в котором есть метод equals(a,b)
1
39 / 9 / 1
Регистрация: 16.02.2018
Сообщений: 251
28.12.2019, 11:29  [ТС]
У меня не работает этот код) Выдает ошибку

Maximum call stack size exceeded
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
28.12.2019, 12:42
Цитата Сообщение от Пурыга Никита Посмотреть сообщение
У меня не работает этот код) Выдает ошибку
Нет слов

Добавлено через 15 минут
Если не заморачиваться
JavaScript
1
2
3
function equal(a, b) {
  return JSON.stringify(a) == JSON.stringify(b);
}
1
39 / 9 / 1
Регистрация: 16.02.2018
Сообщений: 251
28.12.2019, 13:09  [ТС]
Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.12.2019, 13:09
Помогаю со студенческими работами здесь

Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями.
РЕШИТЕ пожалуйста 1) Даны целые числа m,n. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из...

Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями
2)Даны целые числа m, n. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны,...

Если числа не равны,то заменив каждое из них одним и тем же числом, равным большему из исходных,а если равны то заменив числа нулями.
Даны целые числа ш,и: Если числа не равны,то заменив каждое из них одним и тем же числом, равным большему из исходны,а если равны то...

Если их значения не равны, то присвоить каждой переменной большее из этих значений, а если равны, то присвоить переменным нулевые значения.
Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной большее из этих значений, а если равны,...

Создать Generic Mapper, который будет мапить схожие свойства одного объекта в свойства другого
Нужно создать generic mapper, который будет мапить схожие(similar) свойства одного объекта в свойства другого(по имени и типу) меду двумя...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru