Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript创建本例中的嵌套for循环_Javascript_Vue.js - Fatal编程技术网

如何使用javascript创建本例中的嵌套for循环

如何使用javascript创建本例中的嵌套for循环,javascript,vue.js,Javascript,Vue.js,如果列表中不存在该名称,我将尝试将该名称添加到列表中。上述操作不起作用。对于javascript中的…in循环,返回字符串而不是对象。您可以继续将其视为字符串,也可以将其解析为要循环的对象 对于重新定义i,您也完全感到困惑,除非您在第一个循环中创建一个不同的变量,否则它不会起作用 var data = [ { "something": "something", "stages": [{ "node": {"name": "test0"},

如果列表中不存在该名称,我将尝试将该名称添加到列表中。上述操作不起作用。

对于javascript中的…in循环,返回字符串而不是对象。您可以继续将其视为字符串,也可以将其解析为要循环的对象

对于重新定义
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)
      }
    }
  }
}