搜索2d javascript数组

时间:2013-08-12 11:13:04

标签: javascript jquery arrays

我看了一些其他帖子,但我仍然对在数组中使用数组感到有些困惑。

所以我创建了如下数组:

var pagesArray = [
    {
        category: 'pages1',
        pages: [
            'firstPage1',
            'secondPage1',
            'thirdPage1',
            'fourthPage1'
        ]
    }, {
        category: 'pages2',
        pages: [
            'firstPage2',
            'secondPage2',
            'thirdPage2',
            'fourthPage2'
        ]
    }
];

现在我希望能够搜索数组并查找其中是否存在字符串。如果是,我希望它返回它的位置值。

E.g。

jQuery.inArray('secondPage1', pagesArray)

给出结果:

pagesArray[0][1];

我不确定我是否编写了错误的数组,以及我是否正确使用inArray。如果我尝试alert(pagesArray[0][1]);,它会给出一个未定义的值。我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

Updated Demo

$.each(pagesArray, function (i, v) {
    if((pos=$.inArray('secondPage1', pagesArray[i]['pages'])) !== -1){
        console.log('pagesArray['+i+"]['pages']"+'['+pos+']');
    };
});

输出pagesArray[0]['pages'][1]

pagesArray[0]表示在第一个数组中找到[0] 0表示第一个

pagesArray[0]['pages'][1]在子数组[0]内的第一个数组['pages']中找到索引[1]第二个位置,因为索引从0开始

Demo

$.each(pagesArray, function (i, v) {
    if($.inArray('secondPage1', pagesArray[i]['pages']) !== -1){
        alert('inarray');
    };
});

访问类别

console.log(pagesArray[1]['category']);

访问页面

console.log(pagesArray[1]['pages']);

在数组中查找可以使用的值

console.log($.inArray('secondPage1', pagesArray[0]['pages']));

答案 1 :(得分:0)

试试这个:

var pagesArray = [
    {
      category: 'pages1',
      pages: [
        'firstPage1',
        'secondPage1',
        'thirdPage1',
        'fourthPage1' ]
    }, {
      category: 'pages2',
      pages: [
        'firstPage2',
        'secondPage2',
        'thirdPage2',
        'fourthPage2' ]
    }
  ];

for(var i = 0; i < pagesArray.length; i++)
{
    var exist = jQuery.inArray("firstPage2", pagesArray[i]);
    if(exist)
    {
        alert('Got the Value!!!!');
        break;
    }
}

Fiddle

答案 2 :(得分:0)

function findInArray( arr, value ) {
   var j; 
   for ( var i in arr ) {
      if ( ~( j = arr[ i ].pages.indexOf( value ) ) )
         return { i: +i, j: +j };
   }
}

findInArray( pagesArray, 'thirdPage2' );
>> Object {i: 1, j: 2}

所以它是pagesArray[ 1 ].pages[ 2 ]。然后:

var p = findInArray( pagesArray, 'thirdPage2' );
pagesArray[ p.i ].pages[ p.j ];
>> 'thirdPage2'

因此,您可以编写一个返回值的方法,或者不写任何内容来检查项是否存在:

function findInArray( arr, value ) {
   var j; 
   for ( var i in arr ) {
      if ( ~( j = arr[ i ].pages.indexOf( value ) ) )
         return arr[ i ].pages[ j ];
   }

   return false;
}

findInArray( pagesArray, 'foo ' );
>> false
findInArray( pagesArray, 'fourthPage2' );
>> 'fourthPage2'