D3.js: genera dinámicamente el origen y el destino en función de valores json idénticos

Buen día, soy un novato en d3 / javascript y esta puede ser una pregunta fácil / repetida, pero simplemente no puedo hacer que esta sección de mi código funcione.

Tengo esta matriz json aquí:

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"}];

Entiendo que para crear enlaces entre nodos en D3, necesito una matriz con un[{"source": "___", "target": "___"} estructura.

¿Alguien puede guiarme para vincular los elementos de la matriz anteriores en función de sus valores (es decir, el gráfico de nodos vinculará todos los nodos con valores idénticos)?

Una solución en mi mente ahora es iterar manualmente y crear enlaces usando el bucle for..if .., pero esto repetirá muchas veces si tengo muchos nodos (> 1000?) Y creará duplicados en el camino.

Aquí hay una imagen de la salida deseada: