Как найти связанные элементы массива в JS?

У меня есть массив объектов.

let arr = [{name: "a", bind: "b"}, {name: "b", bind: "a"}, {name: "c"}]

Мне нужно из данного массива объектов найти связанные элементы через bind.

  1. Например в верхнем коде связаны два объекта с именем a и b (bind: "b", bind: "a"). Функция должна в данном примере вернуть [{name: "a", bind: "b"}, {name: "b", bind: "a"}].

let arr = [{name: "a", bind: "b"}, {name: "b", bind: "a"}, {name: "c", bind: "b"}]

  1. Второй пример в коде выше. Функция должна вернуть [{name: "a", bind: "b"}, {name: "b", bind: "a"}, {name: "c", bind: "b"}].

В одной группе связанных элементов может быть сколько угодно объектов.

Заранее спасибо за ответ.


Ответы (1 шт):

Автор решения: ksa

Мне нужно из данного массива объектов найти связанные элементы

Предложу такой вариант...

const test = arr => arr.reduce((obj, o, i) => {
    if (!obj.i.includes(i)) {
        const j = arr.findIndex(({name, bind}) => o.bind === name && o.name === bind)
        if (~j) {
            obj.i.push(j)
            obj.res.push([o, arr[j]])
        }
    }
    return obj
}, {i: [], res: []}).res

let arr = [
    {name: "a", bind: "b"}, {name: "b", bind: "a"}, 
    {name: "c"},
]

console.log('Данные ТСа', test(arr))

arr = [
    {name: "a", bind: "b"}, {name: "b", bind: "a"}, 
    {name: "c"},
    {name: "d", bind: "f"}, {name: "f", bind: "d"}, 
]

console.log('Добавлена еще группа совпадений', test(arr))

→ Ссылка