1

我有以下代码:

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

在上面的代码中,我循环data的是一个 JSON 对象。然后我将 的id与 的valthis.id进行比较4。因此,我想要的是当val.id (4)等于时this.id (4)log hello,但是,因为data有几个对象,所以它记录了几个你好。

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

4

3 回答 3

3

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

如果您尝试this.id在调用 each 之前与 from 的值进行比较,则需要缓存它,如下所示:

var someId = this.id;
$.each(data, function (key, val) {
  var items = val.items;
  console.log(val.id);
  if (val.id === someId) {
    console.log('hello');
  }
});
于 2013-02-11T06:10:54.280 回答
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;
    }
});

文档中所述。

于 2013-02-11T06:18:09.940 回答
0

您在这里所拥有的是,您在 if 条件下比较相同的数据,该条件始终为真.. this代表每个循环中的当前元素,在您的情况下也是data如此。您可以在循环内val尝试..console.log(this)

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

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

当它匹配该条件并退出该循环时

在小提琴中试一试

于 2013-02-11T06:18:58.490 回答