2013-10-08 35 views
2

我想在JSON數據中搜索對象的屬性。長度沒有在jQuery中定義

但我在jQuery中遇到類似uncaught type error:length is not defined的錯誤。我的JSON看起來像這樣:

var list = { 
    meta: { 
     limit: 1000, 
     offset: 0, 
     previous: null, 
     total_count: 1797 
    }, 
    objects: [{ 
     id: 1215, 
     location: { 
      id: 1306, 
      name: "Austin", 
      parent_id: 43, 
      type: "City", 
     }, 
     name: "2ND Street District", 
    }] 
}; 

$.each(list.objects.location, function (i, v) { 
    if (v.id.search(new RegExp(/1036/i)) != -1) { 
     alert(v.name); 
     return; 
    } 
}); 

給我關於這個問題的任何想法。

+0

發佈了一個答案。希望它解決了你的問題。看看 – iJade

回答

0

對象是一個列表,則內部是對象(位置),因此必須使用[0]

變化

$.each(list.objects.location 

$.each(list.objects[0].location 

更新

試試這個

$(list.objects[0].location).each(function() { 
    if (this.id.toString().match(/1036/g) != -1) { 
     alert(this.name); 
     return 
    } 
}); 
+0

更改了代碼,但仍然得到了另一個錯誤,如未捕獲的TypeError:無法在代碼中調用未定義的方法「搜索」。 – Ramakrishna

+0

@ramakrishna檢查更新 – Anton

+1

喜只是增加了一個小提琴,顯示烏爾數據校驗out..http://jsbin.com/AZAhaWo/1/edit – codebreaker

1

您的代碼中有兩個錯誤。首先,你沒有遍歷數組。數組ist list.objects,而不是list.objects.location(這就是您得到錯誤length is not defined)的原因。所以,你有你的電話$.each()改變這一點:

$.each(list.objects, function(i, v) { 

現在你可以使用v.location.id訪問當前對象的ID。她來到下一個問題:它是一個整數,它沒有函數search(),所以我們直接在表達式上使用.test(),它在測試之前將整數轉換爲所需的字符串,並將結果作爲布爾值返回,這是正是你在這裏需要的。

if (/1306/.test(v.location.id)) { 
    alert(v.name); 
    } 
}); 

見工作jsfiddle

+0

我建議'如果(/1036/.test(v.location。 id))'以增加清晰度。 – Tomalak

+0

我覺得這對初學者來說看起來更加複雜 –

+1

值得商榷。這是基本的JS語法。另一方面,'test()'立即返回'true'或'false',所以在這種情況下它比'match()'更具慣用性。 – Tomalak

0

3失誤actually..2中的錯誤json數據(儘管它並不重要,但仍然)

type: "City", 
}, 
name: "2ND Street District", 

應該是

type: "City" 
}, 
name: "2ND Street District" 

,並更改

$.each(list.objects.location, function(i, v) 
{ 
    if (v.id.search(new RegExp(/1036/i)) != -1) 
    { 
    alert(v.name); 
     return; 
    } 
}); 

$.each(list.objects, function (i, v) { 
      if (v.location.id.toString().search(new RegExp(/1036/i)) != -1) { 
       alert(v.location.name); 
       return; 
      } 
     }); 

因此你完整的代碼如下:

var list = { 
      meta: { 
       limit: 1000, 
       offset: 0, 
       previous: null, 
       total_count: 1797 
      }, 
      objects: [ 
       { 
        id: 1215, 
        location: { 
         id: 1306, 
         name: "Austin", 
         parent_id: 43, 
         type: "City" 
        }, 
        name: "2ND Street District" 
       } 
       ] 
     }; 

     $.each(list.objects, function (i, v) { 

      if (v.location.id.toString().search(new RegExp(/1036/i)) != -1) { 
       alert(v.location.name); 
       return; 
      } 
     }); 

,這裏是一個工作demo