jquery每个函数都不按我想要的方式工作

时间:2013-02-11 06:05:59

标签: javascript jquery json each

我有以下代码:

$.each(data, function (key, val) {
  var items = val.items;
  console.log(val.id);
  if (val.id === this.id) {
    console.log('hello');
  }
});

在上面的代码中,我循环遍历{J}对象的data。然后,我将id的{​​{1}}与val进行比较,this.id的值为4。因此,我想要的是val.id (4)等于this.id (4)然后记录hello,但是,因为data有几个对象所以它记录了几个hellos。

为什么以及如何才能使它只在匹配该条件并且退出该循环时才打招呼?

3 个答案:

答案 0 :(得分:3)

each()调用中定义的函数中,这= = val。

如果您要在调用每个值之前与this.id的值进行比较,则需要对其进行缓存,如下所示:

var someId = this.id;
$.each(data, function (key, val) {
  var items = val.items;
  console.log(val.id);
  if (val.id === someId) {
    console.log('hello');
  }
});

答案 1 :(得分:0)

正如艾莉森所说,this一边是函数val所以你需要某种缓存。 (当您只需要值而不是密钥时,此功能非常有用,因此您可以function(){...}并使用this代替

另外,如果你想从.each循环中断,在循环函数内返回false:

var someId = this.id;
$.each(data, function (key, val) {
    var items = val.items;
    console.log(val.id);
    if( val.id === someId ) {
        console.log('hello');
        return false;
    }
});

documentation

中指定

答案 2 :(得分:0)

你在这里得到的是,你在if条件下比较相同的数据,这总是正确的。 this代表每个循环中的当前元素,在您的情况下为data,同样也代表val ..您可以在循环内尝试使用console.log(this) ..

if( val.id === this.id ){ //this will always be true

所以你必须重新考虑你的逻辑.....你在(那)条件下实际需要匹配的东西。

  

当它匹配那个条件并离开那个循环时

fiddle

中试用