Как собрать ключ объектов, вложенных в объект? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть функция, в которой я перебираю объект объектов, чтобы извлечь данные из каждого из них и сформировать конечный объект, который создает некоторые соединения. Эта функция работает без проблем, пока я не удаляю некоторые объекты и не воссоздаю соединения, так как я собираю внутренний идентификатор самих элементов, и мне нужно будет вспомнить ключ, назначенный при создании исходного объекта. Ниже приведен пример оригинального объекта. Чтобы вы поняли это, если я удаляю объект с ключом 1 и создаю соединения снова, идентификатор не меняется, и я создаю некоторые соединения между объектами 1 и 3 (которые являются исходным идентификатором), и что мне нужно, это соединение между ключами 0 и 1 (значения, которые переназначаются)

    operators.forEach((next, index, operator) => {
      const combinations = operator.filter(b => b.properties.viewId !== next.properties.viewId);
      const inputKeys: any = Object.keys(next.properties.inputs);
      const inputValues: any = Object.values(next.properties.inputs);
      const operatorsKeys: any = Object.keys(operator); 


      inputKeys.forEach((input, inputIndex) => {
        combinations.forEach((operator) => {
          const outputKeys: any = Object.keys(operator.properties.outputs);
          const outputValues: any = Object.values(operator.properties.outputs);
          outputValues.forEach((output, outputIndex) => {
            if (output.id === inputValues[inputIndex].id) {
              links.push( {
                  fromOperator: operator.properties.id,
                  fromConnector: outputKeys[outputIndex],
                  toOperator: next.properties.id,
                  toConnector: input,
              });
            }
          });
        });
      });


переменная operatorKey будет той, которую мне нужно будет присвоить в значениях fromOperator и toOperator. исходный объект следующий, если он служит руководством:

0: {
    x: 200,
    y: 350,
    properties: {
      id: 1,
      name: "A",
      inputs: {
        input_0: { id: 1, color: "azul" },
        input_1: { id: 2, color: "rojo" },
      },
      outputs: {
        output_0: { id: 1, color: "azul" },
        output_1: { id: 2, color: "rojo" },
      },
    },
  },
  1: {
    x: 600,
    y: 550,
    properties: {
      id: 2,
      name: "B",
      inputs: {
        input_0: { id: 1, color: "azul" },
        input_1: { id: 2, color: "rojo" },
      },
      outputs: { output_0: { id: 1, color: "verde" } },
    },
  },
  2: {
    x: 100,
    y: 450,
    properties: {
      id: 3,
      name: "C",
      inputs: {
        input_0: { id: 1, color: "azul" },
        input_1: { id: 2, color: "verde" },
      },
      outputs: {
        output_0: { id: 1, color: "azul" },
        output_1: { id: 2, color: "rojo" },
      },
    },
  },
}

любая помощь приветствуется

...