开发者

Jquery, using "inarray" on a nested array to find a specific value's index?

开发者 https://www.devze.com 2023-01-08 22:47 出处:网络
I\'m struggling with this, I am still new to javascript and am trying the jquery $.inarray function as I need to be able to find a value in an array so that I can return other values from the same arr

I'm struggling with this, I am still new to javascript and am trying the jquery $.inarray function as I need to be able to find a value in an array so that I can return other values from the same array "line", such as its ID.

When I try to use jquery's inarray function, like this, I just get back -1, saying that it doesn't exist when I know the value exists, nested within the array.. I'm not sure of how to approach this so that I can search for a value, any advice is greatly appreciated.

valuereturn = $.inArray("search_for_value", jsonarray) ;
alert (valuereturn)
开发者_运维百科

EDIT 2:

Here is the result of my echo'ing the JSON from cakephp:

    {"getdata":[{"Uiemail":{"uiemail_id":"2","divid":"upd1","width":"200","height":"200","leftpos":"122","toppos":"122","cssgroup":"1","colortop":"","colorbottom":"","colorborder":"","borderwidth":"","zindex":""}},
{"Uiemail":{"uiemail_id":"3","divid":"upd2","width":"200","height":"200","leftpos":"333","toppos":"444","cssgroup":"1","colortop":"","colorbottom":"","colorborder":"","borderwidth":"","zindex":""}},
{"Uiemail":{"uiemail_id":"4","divid":"upd3","width":"200","height":"200","leftpos":"555","toppos":"466","cssgroup":"1","colortop":"","colorbottom":"","colorborder":"","borderwidth":"","zindex":""}}]} 

EDIT:

Also, here is the output of:

alert(typeof jsonarray+'\n'+jsonarray.length)
output= "object 3 "

I tried this also, but it doesn't give a value and makes errors on my page:

alert(jsonararray)


I'm still not completely sure what you're asking, so here are some assumptions and a quickie solution.

  1. You're looking for uiemail_ids in that blob of data
  2. The blob could be arbitrarily deep
  3. If you find one, you want to get the value of the divid in the same "line"
  4. First one found is the winner

Now throw together a little recursive function:

function deepsearch ( blob, val ) { 
    var result = false;
    for( var item in blob ) {
        if( typeof blob[item] === 'object' ) {
            result = deepsearch( blob[item], val );
            if( result != false ) return result;
        } else if( blob[item] == val && item == 'uiemail_id' ) {
            // found item, blob = obj in which found
            result = blob.divid; // the divid from this "line"
            break; // assume first found wins            
        }
    }
    return result;
}      

Plopping in your exact JSON:

var arr = {"getdata":[{"Uiemail":...

We can now look for a uiemail_id of 4, and get the corresponding divid of upd3:

deepsearch( arr, '4'); // returns upd3
deepsearch( arr, '3'); // returns upd2

This is probably brittle, and certainly can be improved, but maybe it gives you an angle of attack.


Well, for now I've decided to use an approach of flattening the arrays within javascript and pre-processing the data that way since I can't figure out how to do it in javascript.. I found this:

How to "flatten" a multi-dimensional array to simple one in PHP?

This should enable me to move on past this issue but I am interested if anyone knows how to accomplish what I am trying to do directly in javascript (search within the nested array)

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号