如何使用JavaScript将字符串添加到for循环内的列表中?

时间:2019-06-04 17:17:24

标签: javascript vue.js

如果列表中尚不存在所有节点名称,我将尝试将它们添加到列表中。

我知道我的if语句在这里不正确,但是不确定到底是什么错误。

nodeList = []

var data = [
    {
    "something": "something",
    "stages": [{
                "node": {"name": "test0"},
                "status": {"name": "test"},
                "time": {"name": "test"}
               },{
                "node": {"name": "test1"},
                "status": {"name": "test"},
                "time": {"name": "test"}
               }]
     }
];

data.forEach(obj =>
  obj.stages.forEach(stage => if (nodeList.indexOf(stage.node.name) > -1) {
  nodeList.push({stage.node.name})
  );

2 个答案:

答案 0 :(得分:1)

您有一些语法错误,需要测试:

if (nodeList.indexOf(stage.node.name) < 0)

不是> -1。您想添加不存在的值,这意味着indexOf将返回-1。我认为这就是您所追求的:

nodeList = []

var data = [
    {
    "something": "something",
    "stages": [{
                "node": {"name": "test0"},
                "status": {"name": "test"},
                "time": {"name": "test"}
               },{
                "node": {"name": "test1"},
                "status": {"name": "test"},
                "time": {"name": "test"}
               }]
     }
];

data.forEach(obj =>
  obj.stages.forEach(stage => {
    if (nodeList.indexOf(stage.node.name) < 0) {
      nodeList.push(stage.node.name)
    }
  }))

  console.log(nodeList)

如果您可以使用ES6,事情会更容易-您可以使用Set并完全避免测试:

nodeList = new Set

data.forEach(obj =>
  obj.stages.forEach(stage => nodeList.add(stage.node.name)
))

然后,您可以根据接下来要做的事情来迭代Set或将其散布到数组中。

答案 1 :(得分:1)

如果找不到Array.prototype.indexOf(element)

-1返回element

在您的情况下,您使用的是> -1,相反。

您的代码有更新版本:

var nodeList = []

var data = [{
  "something": "something",
  "stages": [{
    "node": {"name": "test0"},
    "status": {"name": "test"},
    "time": {"name": "test"}
   }, {
    "node": {"name": "test1"},
    "status": {"name": "test"},
    "time": {"name": "test"}
  }]
}];

data.forEach((obj) => {
  obj.stages.forEach((stage) => {
    if (nodeList.indexOf(stage.node.name) === -1) {
      nodeList.push(stage.node.name);
    }
  });
});

console.log(nodeList);