我有两个JS数组,我正在迭代它们以找到类似的数组。
anomalies.forEach(function(anomaly) {
links.forEach(function(link) {
if ((link.source.name === anomaly.source) && (link.target.name === anomaly.target)) {
console.log("anomaly");
link.type = "anomaly";
console.log(link);
} else {
link.type = "normal";
}
});
});
console.log(links);
如果link.type
的值应为"anomaly"
,则其反映为"normal"
。
为什么会这样,应该做些什么?
答案 0 :(得分:2)
我是一个算法错误。在提供的屏幕截图中,type="normal"
是对象的当前值。
考虑:
Loop1
Loop2
condition
如果链接对象满足loop2
内的条件,则为其类型值分配"anomaly"
。但是,当loop1
的下一次迭代发生,并且同一链接对象的条件不满足时,则会为该值分配"normal"
。因此它是一个算法错误。
答案 1 :(得分:0)
看起来,就像每个都没有改变起始值一样,试试:
n = anomalies.length;
k = links.length;
for(i=0; i<n; i++){
for(j=0; j<k; j++){
if ((links[j].source.name === anomalies[i].source) && (links[j].target.name === anomalies[i].target)) {
console.log("anomaly");
links[j].type = "anomaly";
console.log(links[j]);
} else {
links[j].type = "normal";
}
}
}
console.log(links);
答案 2 :(得分:0)
如果您查看文档: here
你可以看到有3个参数可以传递给回调函数 - 元素 - 指数 - 数组
如果你这样打电话:
var x=[1,2,3,4,6];
x.forEach(function(e){
if(e==3)f=9;
console.log(e);
})
console.log(x);
1 2 9 4 6
[1,2,3,4,6]
由于您要更改缓冲区值,因此数组元素的值不会更改。
但是如果你像这样使用forEach:
var x=[1,2,3,4,6];
x.forEach(function(e,i,a){
if(e==3)a[i]=9;
console.log(a[i]);
})
console.log(x);
1 2 9 4 6
[1,2,9,4,6]
你看到数组中的值发生了变化。