有没有一种方法可以在打字稿中的 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);
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);