D3.js: gere dinamicamente a origem e o destino com base em valores json idênticos

Bom dia, sou iniciante em d3 / javascript e isso pode ser uma pergunta fácil / repetida, mas não consigo fazer com que esta seção do meu código funcione ..

Eu tenho essa matriz json aqui:

var myArray = [{"id": "red", "value":"1"},
 {"id": "orange", "value":"2"},
 {"id": "yellow", "value":"3"},
 {"id": "green", "value":"1"},
 {"id": "blue", "value":"1"},
 {"id": "violet", "value":"3"}];

Entendo que para criar links entre nós no D3, preciso de uma matriz com um[{"source": "___", "target": "___"} estrutura.

Alguém pode me orientar a vincular os itens da matriz acima com base em seus valores (ou seja, o gráfico do nó vinculará todos os nós com valores idênticos)?

Uma solução em minha mente agora é iterar manualmente e criar links usando o loop for..if .., mas isso repetirá muitas vezes se eu tiver muitos nós (> 1000?) E criará duplicatas ao longo do caminho.

Aqui está uma imagem da saída desejada:

questionAnswers(1)

yourAnswerToTheQuestion