2013-09-22 54 views
1

我有一個包含對象數組列表的對象。我想獲得數組列表中的對象的值。通過數組列表中的名稱訪問對象

例如

var data = { 
      items1: [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }], 
      items2: [{ id: 3, name: 'foo' }, { id: 4, name: 'bar' }] 
      }; 

我試圖訪問ID的名稱:1數組列表items1。

我認爲這會是這樣的

data['items1']['id'].name 

,但我覺得我失去了一些東西。任何人都知道我可能是做錯了

+0

對於初學者來說,這似乎是無效的JSON,因爲你不」在第一項後沒有逗號。 – Daedalus

+0

隨時糾正你看到的問題,我只是很快從網上的另一個例子修改帖子,試圖展示我想要做的事情。 –

+0

不會。一個人從不修改OP的問題中的代碼,因爲這會改變意思。如果代碼錯誤,或者他們錯位,他們的工作是修復/糾正錯誤。 – Daedalus

回答

4

這是一個對象,具有2個鍵(items1items2),兩者的它們是陣列。在每個陣列中的元素是對象,每個元素包含2個鍵(idname)。

爲了讓你會做items1數組的第一個元素的id

data.items1[0].id 

這將返回1

如果你想在items2與「酒吧」的名稱來搜索對象,你可以這樣做:

function find(item, name) { 
    //no such array 
    if(!data[item]) 
     return; 

    //search array for key 
    var items = data[item]; 
    for(var i = 0; i < items.length; ++i) { 
     //if the name is what we are looking for return it 
     if(items[i].name === name) 
      return items[i]; 
    } 
} 

var obj = find('items2', 'bar'); 
obj.id; //4 
obj.name; //'bar' 

我強烈建議閱讀JavaScript ObjectsArrays

+0

在kelsadita的例子中,他表明我可以使用['items1'],這是我要動態傳入的內容,可以嗎? –

+3

您可能需要閱讀[javascript對象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects)以瞭解密鑰的工作方式。做'data.items2'只是'data ['items2']'的糖,而'var k ='items2'; data [k];'是一樣的東西。 – Chad

1

試試這個data['items1'][0].name

+0

根據json的結構不會這樣做。 – Daedalus

+0

零代表什麼? –

+0

@George:它的項目1數組中的第一個元素 – Kelsadita

2

由於items1是數組,你應該寫:

data.items1[0].name 
+0

我將動態傳遞所需的數組,所以這對我不起作用。 –

+0

@George然後你需要重新構造你的json或者創建一個函數來找到相鄰的值。第一個是更簡單的方法。 – Daedalus

+0

@達達利斯你有更好的主意如何重組我的json? –

2

您只能按數字索引訪問數組項目。例如:

// The first item in the array 
data['items1'][0].name 
// The second 
data['items1'][1].name 

如果你想通過編號來查詢,你可以做一個小功能來爲你做的:

function getItemById(anArray, id) { 
    for (var i = 0; i < anArray.length; i += 1) { 
     if (anArray[i].id === id) { 
      return anArray[i]; 
     } 
    } 
} 

var theName = getItemById(data['items1'], 1).name;