没有为javascript对象分配正确的成员值

时间:2015-04-14 13:15:39

标签: javascript

我有两个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"log from chrome

为什么会这样,应该做些什么?

3 个答案:

答案 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]

你看到数组中的值发生了变化。