2016-11-22 20 views
-1

foreachを使用してJSONオブジェクトを反復処理しようとしているときにこのエラーが発生します。 誰かが助けてもらえますか?ここでforEachは関数エラーではありません

は私のJSです:

function dateTimeChecker() { 
    $.ajax({ 
      "url": 'get-booked.php', 
      "method": "get", 
      "dataType": "text", 
      "cache": false 
     }).done(function(jBooked) { 
      var jBookedDates=JSON.parse(jBooked); 
      console.log(jBookedDates); 
       jBookedDates.forEach(function(jB){ 
        if (jB=="11/01/2016") {console.log("works");}else{console.log("doesn't");} 
     }) 
     }); 
} 

そして、ここでは、問題のオブジェクトです:

enter image description here

はまた、私は誰かが説明する気ならば、私は、このオブジェクトを反復処理する方法を疑問に思って。 :)

+0

AJAX通話なしで[mcve]を作成できますか?エラーを再現することができません。 –

+0

そのオブジェクトは配列ではありません。多分あなたはここでforeachを使うことはできません。 – Mahi

+0

申し訳ありませんが、私はそれはまた、アヤックスを置くことが理にかなっていると思いました。 –

答えて

3

あなたが受け取っている応答はJSONです。配列オブジェクトのメソッドforEachを普通のオブジェクトに使用することはできません。あなたは、あなたがそれらのアレイへのアクセスにブラケット表記を使用することができ、コメント内のクエリの

Object.keys(jBookedDates).forEach(function(jB){ 
if (jB=="11/01/2016") { 
    console.log("works"); 
} else { 
    console.log("doesn't"); 
} 
}); 

、解析されたJSONに属し列挙独自のプロパティを取得するには、この文脈でObject.keys()を使用する必要が

Object.keys(jBookedDates).forEach(function(jB){ 
    var arr = jBookedDates[jB]; 
    console.log(arr); //will print the array belongs to each property. 
}); 
+0

ありがとう。私はうまくいきましたが、今は私のオブジェクトのそれぞれに含まれているこれらの配列にどのようにアクセスできるのだろうかと思います。手伝ってくれますか? –

+0

@RobertRoss私の編集を参照してください。 –

3

forEachのは配列のみで動作しますので、あなたがオブジェクトを反復処理したい場合は、あなたは何をする必要があります:

for (var attr in obj) { 
    // attr is your obj object attribute 
    if (obj.hasOwnProperty(attr)) { 
     // the magic goes here 
    } 
} 
+2

hasOwnPropertyチェックなしでforを使用すると、プロトタイプの列挙可能なプロパティも渡ります。 –

+0

ああ、私はそれをここに入れるのを忘れてしまった。ありがとう@RajaprabhuAravindasamy – MarioAleo

2
Object.keys(a).forEach(elem => { console.log(a[elem]) }) 
3

どのように私は、このオブジェクト

あなたがすることはできませんが、このオブジェクトのプロパティを反復処理することができますを反復処理することができます。これはObject.keys()を使用して行われ、の配列がオブジェクトのプロパティ(またはキー)で返されます。

Object.keys(jBookedDates).forEach(function(key) { 
    //jBookedDates[key] will give you the value for the current property 
}); 

.forEachが実際にArray.prototype.forEachであることを覚えておいてください。つまり、この関数は配列上で呼び出され、ではなくというオブジェクトが呼び出されます。

1

代わりにfor..inを使用しないのはなぜですか?

例:

function dateTimeChecker() { 
$.ajax({ 
     "url": 'get-booked.php', 
     "method": "get", 
     "dataType": "text", 
     "cache": false 
    }).done(function(jBooked) { 
     var jBookedDates=JSON.parse(jBooked); 
     console.log(jBookedDates); 
     for (key in jBookedDates) { 
      if (jBookedDates.hasOwnProperty(key)) 
       if (jBookedDates[key] == "11/01/2016") 
       { 
        console.log("works"); 
       } else { 
        console.log("doesn't"); 
       } 
} 
    }); 

}

常にjQueryのソリューションをデフォルトにはない便利です。 vanilla javascriptの仕組みを理解することで、多くの問題を解決することができます。ライブラリは、特定のロジックを適用する必要がある領域の外で、不必要な複雑さや改訂なしに対処できません。

1

Arrayクラスメソッドなので、forEachを使用してオブジェクトを反復処理することはできません。

オブジェクトを使用した:

は、オブジェクトを反復処理するためにいくつかの方法があります。キー()

あなたは、あなたのオブジェクトキーを取得するためにObject.keys()メソッドを使用しますが、それを反復:

var keys = Object.keys(jBookedDates); 

keys.forEach(function(key) { 
    var item = jBookedDates[key]; 
    // Do your logic here 
    // You will have access to the `key` variable and `item` variable 
} 

jQuery.eachを使用して()

jQueryのと両方の作品に改善forEach方法を提供し、 jQueryコレクション、配列またはオブジェクト。

$.each(function(key, item) { 
    // Do your logic here 
    // You also will have access to `key` and `item` variables 
}); 

他の多くのJavascriptフレームワーク/ライブラリは、カスタムforeachメソッドを提供します。

関連する問題