Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 JavaScript 2 массива json получить совпадения  [new]
linney
Member

Откуда:
Сообщений: 1
А кто силен в красивостях js?
a = [{"a":"a1"},{"a":"a2"},{"a":"a3"}]
b = [{"b":"a3"},{"b":"a2"}]

Как бы красиво получить c=["a2", "a3"]
без нудных переборов?

Спасибо!
28 апр 21, 20:29    [22315944]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript 2 массива json получить совпадения  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 2016
linney
А кто силен в красивостях js?
a = [{"a":"a1"},{"a":"a2"},{"a":"a3"}]
b = [{"b":"a3"},{"b":"a2"}]

Как бы красиво получить c=["a2", "a3"]
без нудных переборов?

Спасибо!


1) Это форум по java, а не по JS.
2) ХЗ, насколько красиво, можно так:
a.map(x => x.a).filter(x => b.map(y => y.b).includes(x))
28 апр 21, 20:35    [22315946]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript 2 массива json получить совпадения  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 2337
Lelouch
includes

Это как раз перебор в лоб, причём для каждого элемента в A будет создаваться массив из B, а потом по этому массиву будет еще один пробег. Если так писать, то код очень скоро перестанет отрабатывать за конечное время и все начнут выть, что мол, жс тормозит.
var a = [{"a":"a1"},{"a":"a2"},{"a":"a3"}]
var b = [{"b":"a3"},{"b":"a2"}]
var setA = new Set(a.map(v=>v.a));
var c = b.map(v=>v.b).filter(v=>setA.has(v));


Сообщение было отредактировано: 29 апр 21, 05:39
29 апр 21, 05:46    [22316080]     Ответить | Цитировать Сообщить модератору
 Re: JavaScript 2 массива json получить совпадения  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 2016
crutchmaster
Lelouch
includes

Это как раз перебор в лоб, причём для каждого элемента в A будет создаваться массив из B, а потом по этому массиву будет еще один пробег. Если так писать, то код очень скоро перестанет отрабатывать за конечное время и все начнут выть, что мол, жс тормозит.
var a = [{"a":"a1"},{"a":"a2"},{"a":"a3"}]
var b = [{"b":"a3"},{"b":"a2"}]
var setA = new Set(a.map(v=>v.a));
var c = b.map(v=>v.b).filter(v=>setA.has(v));

Обычно, когда просят без нудных переборов, это означает без for loop)
А так - да, вы правы)
29 апр 21, 08:07    [22316106]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить