2013-09-22 56 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;