2016-08-01 4 views
-3

私は次の形式でデータベース呼び出しから作成されたオブジェクトを持っている:Javascriptを/ jQueryの未定義のオブジェクトの長さ

Object { group1={...}, same=null, group2=null} 

enter image description here

私はGROUP1内の項目の数を取得しようとしています、グループ2など。

私はそうのようなコンソールを介してアクセス:上記画像における

dataObj.group1.length 

、これは未定義返します。しかし、もし私がgroup1に複数のアイテムを持っていれば、それはちょうどいい数を返します。オブジェクト/配列内に単一の項目がある場合にのみ問題が発生するようです。

これらの可能性を説明し、上記のオブジェクトの項目のlengthを返すために使用できる関数はありますか?

更新:

は、これは私が私のデータを作成しています方法です:

success: function(data) { 

     // Define our data response 
     var d = data.data; 

     // Push our data to an object 
     dataObj = { 
      same: (d.same ? d.same.tools : null), 
      group1: (d.group1 ? d.group1.tools : null), 
      group2: (d.group2 ? d.group2.tools : null) 
     } 

     // Render our table 
     renderCompare(); 
    } 

ここから、私はsamegroup1group2内の項目の金額を取得しようとしています。

これは、複数のアイテムがレスポンスに含まれている場合の例です。 dataObj.group1.lengthを使用してアクセスでき、2が正しく返されます。すべて私は彼の方法を把握しようとしているときにのみこれが1結果です。 enter image description here

+0

私は質問で混乱しています。オブジェクトのプロパティの数を数える方法をお探しですか? – stackoverfloweth

+1

オブジェクトには長さがありません。したがって、グループ1のプロパティの数にかかわらず、 'undefined'を取得する必要があります。 – Archer

+0

@Archerなぜgroup1に2つのアイテムがあり、それから1つのアイテムがある場合、これは機能しますか? – SBB

答えて

2

私の頭が木のブロックに変わった後、質問が正しく説明された後、それは事実をカバーする単なるケースです。 @ KevinBは、応答データを本当に消毒する必要があるので、オブジェクトが1つしかなくてもオブジェクトがない場合でも常にオブジェクトの配列を返します。それがあなたの問題の原因です。

あなたはこの応答を取得した場合...その後、

{ 
    group1: { tool: 244, toolName: "blueprint" }, 
    group2: null, 
    same: null 
} 

group1は、オブジェクト、配列ではありませんので、したがって、何のlength性質を持っていません。しかし、あなたの代わりにこの応答を得た場合は...その後、

{ 
    group1: [{ tool: 244, toolName: "blueprint" }], 
    group2: null, 
    same: null 
} 

group1はまったく同じデータを保持しますが、配列になり、したがって、length性質を持っているでしょう。あなたの例では

私は何を示唆していることは、オブジェクトを評価し、このように、予想される応答を返す単純な関数である...

function getLength(obj) { 
    if (obj == null) return 0; 
    if (obj.length == undefined) return 1; 
    return obj.length; 
} 

、あなたはgetLength(dataObj.group1)を使用し、それは1.それは考え返しますnullの場合は0を返し、配列の場合は実際の長さを返します。

+0

私の最初の質問では非常に混乱し、曖昧で残念です。私は会議の前に時計に反撃していて、私はそれを推測するために開いたままにしていたことに気づいていませんでした。私はあなたの例で提案された関数を使用して、応答の構造を変更することができます。それは完璧に働いて、あなたの時間とよく書かれた答えに感謝します。私は最初からより良い質問を書くようにします。 – SBB

+2

心配はいりません。それは私の間違いでした、そして、私は最終的にクリックされるまで他の方法で質問を読むことができませんでした。私たちが助けになることができてうれしい:) – Archer

関連する問題