如何使用javascript创建本例中的嵌套for循环
如果列表中不存在该名称,我将尝试将该名称添加到列表中。上述操作不起作用。对于javascript中的…in循环,返回字符串而不是对象。您可以继续将其视为字符串,也可以将其解析为要循环的对象 对于重新定义如何使用javascript创建本例中的嵌套for循环,javascript,vue.js,Javascript,Vue.js,如果列表中不存在该名称,我将尝试将该名称添加到列表中。上述操作不起作用。对于javascript中的…in循环,返回字符串而不是对象。您可以继续将其视为字符串,也可以将其解析为要循环的对象 对于重新定义i,您也完全感到困惑,除非您在第一个循环中创建一个不同的变量,否则它不会起作用 var data = [ { "something": "something", "stages": [{ "node": {"name": "test0"},
i
,您也完全感到困惑,除非您在第一个循环中创建一个不同的变量,否则它不会起作用
var data = [
{
"something": "something",
"stages": [{
"node": {"name": "test0"},
"status": {"name": "test"},
"time": {"name": "test"}
},{
"node": {"name": "test1"},
"status": {"name": "test"},
"time": {"name": "test"}
}]
}
];
nodeList = []
data.forEach(obj =>
obj.stages.forEach(stage => if (nodeList.indexOf(stage.node.name) > -1) {
nodeList.push({stage.node.name})
);
编辑:
在这里,根据你在OP中的内容,我修复了你的语法错误
for (field in this.job[0].stages[i]) {
console.log(field);
for (node in this.job[0].stages[i][field]) {
console.log(node);
console.log(this.job[0].stages[i][field][node].name);
}
}
为什么不试试:
var data = [
{
"something": "something",
"stages": [{
"node": {"name": "test0"},
"status": {"name": "test"},
"time": {"name": "test"}
},{
"node": {"name": "test1"},
"status": {"name": "test"},
"time": {"name": "test"}
}]
}
];
nodeList = [];
data.forEach(obj =>
obj.stages.forEach(stage => {
if (nodeList.indexOf(stage.node.name) === -1) {
return nodeList.push(stage.node.name)
}
})
);
函数节点名(){
if(此.job[0].stages[0]){
for(设i=0;i
正如其他人提到的,在本例中,i
只是一个字符串,因为它是一个键的名称,而键的名称只是一个字符串。要在结构中获得i
的值,您需要再次使用它完全引用对象:
function nodeName () {
if (this.job[ 0 ].stages[ 0 ]) {
for (let i = 0; i < this.job[ 0 ].stages.length; i++) {
let name = this.job[ 0 ].stages[ i ].node.name
if (name)
console.log(name) // "test"
}
}
}
给定已添加到OP的对象文字(并修复语法错误),数据对象是具有stages属性的对象数组 stages也是具有node属性的对象数组,node属性是具有name属性的对象 您不应该使用for..in for数组,因为不能保证顺序。假设您需要它,您应该使用forEach,这也使代码更加简洁:
var数据=[
{
“某物”:“某物”,
“阶段”:[{
“节点”:{“名称”:“test0”},
“状态”:{“名称”:“测试”},
“时间”:{“名称”:“测试”}
},{
“节点”:{“名称”:“test1”},
“状态”:{“名称”:“测试”},
“时间”:{“名称”:“测试”}
}]
}
];
data.forEach(obj=>
obj.stages.forEach(stage=>console.log(stage.node.name))
);
假设您要打印每个键的名称
属性的所有值,(即节点
、状态
和时间
,您可以执行以下操作
var sampleJobs=[{
“某物”:“某物”,
“阶段”:[{
“节点”:{
“名称”:“节点0测试”
},
“地位”:{
“名称”:“状态0测试”
},
“时间”:{
“名称”:“time0测试”
}
},
{
“节点”:{
“名称”:“节点1测试”
},
“地位”:{
“名称”:“状态1测试”
},
“时间”:{
“名称”:“时间1测试”
}
}
]
}]
//外部for循环用于作业对象本身的数组
对于(i=0;i{
console.log(sampleJobs[i].stages[j][e][“name”])
})
}
}
运算符中的获取索引。使用此作业[0]的运算符的,阶段[i]
for(…in…)
迭代对象中的键。在您的示例中,i
是一个字符串,而不是一个stage。根据JLRishe的评论,您可能希望(此.job[0].stage[i]){console.log(node.name)}
。i是属性名,而不是引用。您可能还需要函数nodeName(){…}
。这并没有解决问题-我更新了OP,提供了有关一百万个语法错误的更多信息,但您在其中更新的代码基本上是正确的,因此这似乎是最优雅的解决方案-我尝试了它,但无法使其工作。然后我意识到OP中的json示例有点不符合顺序,所以我在OP中更新了json-希望您可以修改您的答案以匹配这一点我是什么?您的行this.job[0].stages[i]
如何像您解释的那样工作i
必须在该函数之外的某个地方定义,对吗?如果您不想要它,那么它将只是这个答案,没有第1、3和5行的[i]
。我添加了[i],因为这是在下面的答案中建议的。不知道我是做什么的。希望找到一个解决方案,如果这不是你原来问题的一部分,那么试试这个,不要使用我上面提到的3个i。你问题中的JSON首先不是真正的JSON(每个数组值中都缺少一个右括号),所以我不确定你需要什么,我删除了i,但仍然不起作用。我在json中有很多敏感数据,因此无法进行复制和粘贴-但我再次尝试在OP中更准确地更新它。使用您的答案,我将如何将名称添加到单个列表中?我能够使用您的答案使我的工作正常-现在,尽管尝试将console.log替换为将node.name添加到列表中,但我仍遇到了困难(如果它还不存在的话),我可能会为这个问题写一篇新的帖子,但我还是用修改过的代码更新了这里的OP
nodeName() {
if (this.job[0].stages[0]) {
for (i in this.job[0].stages[i]) {
console.log(i);
for (node in this.job[0].stages[i].node) {
console.log(node.name)
}
}
}
}