Как найти связанные элементы массива в JS?
У меня есть массив объектов.
let arr = [{name: "a", bind: "b"}, {name: "b", bind: "a"}, {name: "c"}]
Мне нужно из данного массива объектов найти связанные элементы через bind.
- Например в верхнем коде связаны два объекта с именем 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"}]
- Второй пример в коде выше. Функция должна вернуть
[{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))