Вообще inner join — это оператор SQL (язык для СУБД — систему управления базами данных). И иногда в странных компаниях даже у фронтендеров спрашивают, как он работает.
Ваша задача — реализовать аналогичное поведение на джаваскриптовых массивах.
Функция innerJoin(arrLeft, arrRight, keyLeft, keyRight)
принимает 4 аргумента: два массива с объектами, которые нужно объединить, и названия ключей, по которым нужно объединять.
В результате должен образоваться новый массив, в котором объекты будут состоять из ключей объектов первого массива и ключей объектов второго массива. Два объекта obj1
и obj2
объединяются, если значения obj1[keyLeft]
и obj2[keyRight]
равны.
На примере понятнее. Объединяем массив пользователей и массив купленных курсво по айдишнику пользователя (в первом массиве это ключ id
, во втором — userId
).
Пользователь alice
купил 2 курса, пользователь bob
ничего не купил, у пользователя carol
— 1 курс. Итого в ответе три объекта.
const users = [ { id: 1, name: "alice", email: "alice@mail.com", }, { id: 2, name: "bob", email: "bob@ya.com", }, { id: 3, name: "carol", email: "carol@ya.com", }, ]; const soldCourses = [ { userId: 1, course: "async-js", date: "11.02.2015", }, { userId: 3, course: "fp-js", date: "22.03.2015", }, { userId: 1, course: "fp-js", date: "26.01.2015", }, ]; console.table(innerJoin( users, soldCourses, "id", "userId", )); const expectedResult = [ { id: 1, name: 'alice', email: 'alice@mail.com', userId: 1, course: 'async-js', date: '11.02.2015', }, { id: 1, name: 'alice', email: 'alice@mail.com', userId: 1, course: 'fp-js', date: '26.01.2015', }, { id: 3, name: 'carol', email: 'carol@ya.com', userId: 3, course: 'fp-js', date: '22.03.2015', }, ];