Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.12.2019, 20:38
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Как конкатенировать два массива объектов без дублей?
Есть два массива объектов:

var all_labels_list = [{id: "e:1222", text: "1"},
            {id: "e:1244", text: "11"},
            {id: "e:1237", text: "111"},
            {id: "e:1236", text: "1111"},
            {id: "e:1223", text: "2"},
            {id: "e:1224", text: "3"},
            {id: "e:1225", text: "4"},
            {id: "e:1226", text: "5"},
            {id: "e:1228", text: "6"},
            {id: "e:1229", text: "7"},
            {id: "e:1249", text: "8"},
            {id: "e:1250", text: "9"},
            {id: "e:1220", text: "d"},
            {id: "e:1219", text: "ds"},
            {id: "e:1217", text: "dsd"},
            {id: "e:1227", text: "dsddsdds"},
            {id: "e:1215", text: "dsdsd"},
            {id: "e:1216", text: "dsdsdsd"},
            {id: "e:1232", text: "fdfdfdffdfd"},
            {id: "e:1230", text: "fff"},
            {id: "e:1231", text: "ffff"},
            {id: "e:1221", text: "s"},
            {id: "e:1218", text: "sd"},
            {id: "e:1247", text: "sdsd"},
            {id: "e:1243", text: "sdsdsd"},
            {id: "e:1233", text: "ss"},
            {id: "e:1235", text: "sss"},
            {id: "e:1234", text: "ssss"},
            {id: "e:1212", text: "\u0412\u0435\u0431\x2D\u0441\u0430\u0439\u0442"},
            {id: "e:1242", text: "\u0432\u044B\u0432\u044B\u0432\u044B"},
            {id: "e:1248", text: "\u043D\u043E\u04321"},
            {id: "e:1245", text: "\u043D\u043E\u0432\u0430\u044F\x20\u043C\u0435\u0442\u043A\u0430"},
            {id: "e:1246", text: "\u043D\u043E\u0432\u0430\u044F\x20\u043C\u0435\u0442\u043A\u0430\x20\u0438\u0437\x20\u0441\u043A\u0440\u044B\u0442\u043E\u0433\u043E\x20\u0438\u043D\u043F\u0443\u0442\u0430"},];
            
            
            var selected_labels = [{id: "e:1222", text: "1"},
                {id: "e:1244", text: "11"},
                {id: "e:1237", text: "111"},
                {id: "e:1236", text: "1111"},];


Как их конкатенировать сравнивая по ID (он уникальный), а повторяющемся элементам добавить: selected = true?
Ответить с цитированием
  #2 (permalink)  
Старый 23.12.2019, 20:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

CryNet,
https://javascript.ru/forum/misc/790...tml#post517221
Ответить с цитированием
  #3 (permalink)  
Старый 23.12.2019, 21:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

function uniqSelected(...args){
  const out = [];
  const map = {};
    
  args.forEach(arr => arr.forEach(item => {
    const {id} = item;
    if(id in map) 
      return map[id].selected = true;
    out.push(map[id] = {...item});
  }));
  
  return out;
}
__________________
29375, 35

Последний раз редактировалось Aetae, 23.12.2019 в 21:59.
Ответить с цитированием
  #4 (permalink)  
Старый 23.12.2019, 22:13
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от Aetae
function uniqSelected(...args){
Пустой массив возвращается:
https://jsfiddle.net/tgue3j9w/5/
Ответить с цитированием
  #5 (permalink)  
Старый 23.12.2019, 22:38
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

https://jsfiddle.net/wtou9mv4/
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 23.12.2019, 23:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Aetae,
может else будет лучше смотреться, чем return в никуда?
if(id in map) 
      return map[id].selected = true;
    out.push(map[id] = {...item});


if(id in map) map[id].selected = true;
    else out.push(map[id] = {...item});
Ответить с цитированием
  #7 (permalink)  
Старый 24.12.2019, 11:05
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от Aetae Посмотреть сообщение
https://jsfiddle.net/wtou9mv4/
оригинальное решение. Спасибо. Правда, немного, сложно для восприятия
Ответить с цитированием
  #8 (permalink)  
Старый 24.12.2019, 11:05
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от рони Посмотреть сообщение
может else будет лучше смотреться, чем return в никуда?
Спасибо
Ответить с цитированием
  #9 (permalink)  
Старый 25.12.2019, 03:20
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Сообщение от рони Посмотреть сообщение
Aetae, может else будет лучше смотреться, чем return в никуда?
В данном конкретном случае - может быть. Но в целом, особенно когда каждое ветвление может быть многострочным, мне нравится стиль "отбрасывания концов": чётко и явно декларируешь "после данного условия дальше дороги нет, независимо ни от чего". Если условие выполнилось - дальше код можно не читать.
Тогда как если цепочка продолжается else if ... else, то "внутреннему интерпретатору"(и глазам) приходится спускаться до конца всей условной цепочки и ниже в поисках возможного продолжения, что тратит ресурс мозга.)
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 25.12.2019, 07:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Aetae
что тратит ресурс мозга.)
это пять!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить определенный объект из массива объектов? Rmydar Общие вопросы Javascript 5 04.02.2018 18:16
Как передать в массив перемеенную как ключ массива? фдуч Общие вопросы Javascript 15 11.01.2018 21:21
Клик на "аккордеон" на внутренней срабатывает как ссылка (без раскрытия) LouDminsk jQuery 4 14.06.2017 11:18
Как создать цитатник? WGN Общие вопросы Javascript 10 29.01.2017 01:39
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53