有没有办法在打字稿中的VAR中循环?

发布于 2025-01-30 19:36:37 字数 459 浏览 0 评论 0原文

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等,等等,我有没有办法循环并创建完全相同的东西? 任何建议将被赞赏。

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 }
  }

So instead of writing node1,node2, and so on, is there a way I can loop and create the exact same thing?
Any suggestions are appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

土豪我们做朋友吧 2025-02-06 19:36:37

这是一个解决方案:

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));

Here's a solution:

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));

旧人九事 2025-02-06 19:36:37

是的。您可以使用“ nofollow noreferrer”> .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())

Yes. You can dynamically create property names using something like Object.fromEntries.

Object.fromEntries creates an object from a series of entries, where an "entry" is an array with two elements: a property name, and a value for that property.

Here's an example that recreates your data above:

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())

戴着白色围巾的女孩 2025-02-06 19:36:37

确定可以!许多方式,一种常见的方法是:

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"
    }
}
*/

Sure you can! Many ways, one of the common ones is:

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"
    }
}
*/
游魂 2025-02-06 19:36:37

以下代码具有相同的结果,但使用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 }
  }

The following code has the same result but uses for-loops, please be more specific in your question if you need something else.

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 }
  }
谁许谁一生繁华 2025-02-06 19:36:37

尝试一下(我只是添加了一个逻辑来生成对象)

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);

Try this (I just added a logic to generate the objects) :

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);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文