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次に、の値が。のとを比較しvalます。したがって、私が欲しいのは、equalsがthen logである場合ですが、複数のオブジェクトがあるため、いくつかのhelloをログに記録します。this.id4val.id (4)this.id (4)hellodata

なぜ、そしてどうすれば、それがその条件に一致し、そのループから抜け出したときにのみhelloと表示されるようにすることができますか?

4

3 に答える 3

3

の呼び出し内で定義された関数ではeach()、this===valです。

それぞれを呼び出す前のfromの値と比較しようとしている場合は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');
  }
});
于 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 に答える