如何在JavaScript中访问数组中的数据

时间:2011-08-29 04:43:35

标签: javascript jquery arrays var

  var lotsData = [
    {
        index: 0,
        data: 'I want to be in HTML',

    },
    {
        index: 1,
        data: 'I dont' want to be in HTML',
    }]

假设我更喜欢有一个带有数组的var。如何访问索引0,说它连接到单击事件并且我想使用数据:

    $('.tab').live('click', function() {
          console.log("I was clicked");
                      $('#fancy').text(WHAT GOES HERE TO ACCESS data from index 0?);
        });

4 个答案:

答案 0 :(得分:2)

jQuery是用Javascript编写的,Javascript本身提供了Array对象。

因此,访问数组的第0个元素是array_name[0]

在您的示例中,您将对象存储为数组的元素。您的对象包含“索引”属性,但要小心,您的“索引”属性与数组中的元素索引无关。您不应该包含“索引”属性......例如:

 var lotsData = [
{ // this is the first array element, index value in the array is 0
    index: 1,
    data: 'I want to be in HTML',

},
{  // this is the second array element, index value in the array is 1
    index: 0,
    data: "I don't want to be in HTML",
}]

lotsData[0].data // value: 'I want to be in HTML' 

更好的例子是:

 var lotsData = [
{  // this is the first array element, index value in the array is 0
    category: 'shoe',
    detail: 'red'

},
{  // this is the second array element, index value in the array is 1
    category: 'fruit',
    detail: 'apple'
}]

lotsData[0].detail // value: 'red'

已添加:尾随逗号

请注意,虽然Javascript是一种强大的语言,但确实有它的怪癖。 一个重要的是尾随逗号,例如

...
    index: 0,
    data: "I don't want to be in HTML",  // Trailing comma. DON'T DO THIS!
}]

问题是尾随逗号不是Javascript语言的正式部分。大多数JS引擎都支持它,但是一个非常重要的引擎不支持:Internet Explorer浏览器支持尾随逗号,并且在遇到逗号时会死于悲伤。

由于其独特的处理方式,您的测试应始终包含IE。

我在IE 7中测试。

答案 1 :(得分:1)

 $('.tab').live('click', function() {
          console.log("I was clicked");
                      $('#fancy').text(lotsData[0].data);
        });

当然这是假设您的索引的顺序正确(因为它们似乎来自您的示例数据)。

在这种情况下,没有理由保留数组对象的index属性。使用简单的字符串数组会更容易使用。

例如

var lotsData = ["I want to be in HTML","I don't want to be in HTML"];

这样你只需要引用lotsData[0]

答案 2 :(得分:1)

首先不要使用.live(),除非你真的需要(http://jupiterjs.com/news/why-you-should-never-use-jquery-live

但是如果你看一下.live()文档(http://api.jquery.com/live/),你会发现你可以将数据传递给.live(),这将在回调中提供。

  

.live(eventType,eventData,handler)

所以:

$('.tab').live('click',lotsData,function(event){
    console.log('I was clicked');
    $('#fancy').text(event.data[0].data);
});

这就是你在问什么?

或者你正在寻找一种迭代lotdata的方法,找出数组中的哪个项目.index = 0?

答案 3 :(得分:0)

你可以试试这个,而不是最好的解决方案:

$('.tab').live('click', function() {
    console.log("I was clicked");
    var realIndex;
    for (var i = 0; i < lotsData.length; i++ )
    {
        if (lotsData[i].index == 0) {
            realIndex = i;
            break;
        }
    }
    $('#fancy').text(lotsData[realIndex].index);
});