Итак, у меня есть массив объектов ссылок из d3
nodelinks
(6) […]
0: Object { index: 1, source: {…}, target: {…} }
1: Object { index: 5, source: {…}, target: {…} }
2: Object { index: 8, source: {…}, target: {…} }
3: Object { index: 9, source: {…}, target: {…} }
4: Object { index: 10, source: {…}, target: {…} }
5: Object { index: 21, source: {…}, target: {…} }
length: 6
<prototype>: Array []
И я хочу получить из него новый массив, содержащий уникальные узлы, как source
, так и target
. У меня получилось вот так:
_nodes = []
nodelinks.forEach(x => {
if (!(x.target in _nodes)){_nodes.push(x.target)};
if (!(x.source in _nodes)){_nodes.push(x.source)};
});
new Set(_nodes).forEach(x => d3.select(`#${x.id}`).classed('active', true))
Но правда! Должен быть способ получше: какая-нибудь умная идиома javascripty с map()
или filter()
или что-то в этом роде, да? Или, может быть, у d3 есть какой-то собственный метод массива? В python я бы использовал понимание списка. Должно быть, мне не хватает чего-то очевидного.
есть подсказки?