如果列表中尚不存在所有节点名称,我将尝试将它们添加到列表中。
我知道我的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})
);
答案 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);