有没有一种方法可以在打字稿中的 var 中循环?

Is there a way I can loop inside a var in typescript?

setup() {
    var nodes = {
      node1: { name: "Node 1" },
      node2: { name: "Node 2" },
      node3: { name: "Node 3" },
      node4: { name: "Node 4" },
    }
    var edges = {
      edge1: { source: "node1", target: "node2" },
      edge2: { source: "node2", target: "node3" },
      edge3: { source: "node3", target: "node4" },
    }
    return { nodes, edges }
  }

因此,除了编写 node1、node2 等等,有没有一种方法可以让我循环并创建完全相同的东西? 任何建议表示赞赏。

当然可以!方式很多,其中一种比较常见的是:

const nodes = Object.fromEntries(
  Array.from(Array(10).keys())
    .map(i => [`node${i + 1}`, {name: `Node ${i + 1}`}])
);

/* nodes are:
{
    "node1": {
        "name": "Node 1"
    },
    "node2": {
        "name": "Node 2"
    },
    "node3": {
        "name": "Node 3"
    },
    "node4": {
        "name": "Node 4"
    },
    "node5": {
        "name": "Node 5"
    },
    "node6": {
        "name": "Node 6"
    },
    "node7": {
        "name": "Node 7"
    },
    "node8": {
        "name": "Node 8"
    },
    "node9": {
        "name": "Node 9"
    },
    "node10": {
        "name": "Node 10"
    }
}
*/

是的。您可以使用 Object.fromEntries.

之类的方式动态创建 属性 名称

Object.fromEntries 从一系列 条目 创建一个对象,其中“条目”是一个包含两个元素的数组:属性 名称,以及属性.

的值

下面是一个重新创建上面数据的示例:

function setup() {
    const nodes = Object.fromEntries(
      [1,2,3,4].map(n => ["node"+n, { name: "Node " + n }])
    )
    const edges = Object.fromEntries(
      [1,2,3].map(n => [
        "edge"+n, 
        { source: "node" + n, target: "node" + String(n+1) }
      ])
    )
    return { nodes, edges }
 }
 console.log(setup())

这是一个解决方案:

const setup = (nodeCount) => {
  const nodes = {};
  const edges = {};

  for (let i = 1; i <= nodeCount; i++) {
    nodes[`node${i}`] = {
      name: `Node ${i}`
    }
    
    if (i <= nodeCount - 1) {
      edges[`edge${i}`] = {
        source: `node${i}`,
        target: `node${i + 1}`
      }
    }
  }

  return { nodes, edges };
}

console.log(setup(4));

以下代码具有相同的结果,但使用 for-loops,如果您需要其他内容,请在您的问题中更具体。

setup() {
    var nNodes = 4
    var nEdges = 3
    var nodes = {}
    var edges = {}

    for(i = 1 ; i < nNodes + 1; i++){
        nodes['node'+i.toString()] = {"name": "Node " + i.toString()}
    }
    for(i = 1 ; i <nEdges + 1; i++){
        edges['edge'+(i+1).toString()] = {"source": "node"+i.toString(), "target": "node"+(i+1).toString()}
    }
    return { nodes, edges }
  }

试试这个(我刚刚添加了一个逻辑来生成对象):

const nodes = {}
var edges = {}

for (let i = 1; i <= 4; i++) {
  nodes['node' + i] = { name: 'Node ' + i }
  if (i !== 4) {
    edges['edge' + i] = { source: 'node' + i, target: 'node' + (i + 1)
    }
  }
}

console.log(nodes);
console.log(edges);