【问题标题】:Jquery, using "inarray" on a nested array to find a specific value's index?Jquery,在嵌套数组上使用“inarray”来查找特定值的索引?
【发布时间】:2011-03-20 13:53:41
【问题描述】:

我正在为此苦苦挣扎,我仍然是 javascript 的新手,并且正在尝试 jquery $.inarray 函数,因为我需要能够在数组中找到一个值,以便我可以从同一个数组中返回其他值“行”,例如它的 ID。

当我尝试像这样使用 jquery 的 inarray 函数时,我只是返回 -1,说当我知道值存在时它不存在,嵌套在数组中。我不确定如何接近这个,以便我可以搜索一个值,非常感谢任何建议。

valuereturn = $.inArray("search_for_value", jsonarray) ;
alert (valuereturn)

编辑 2:

这是我从 cakephp 中回显 JSON 的结果:

    {"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":""}}]} 

编辑:

另外,这里是输出:

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

我也试过了,但它没有给出值并在我的页面上出错:

alert(jsonararray)

【问题讨论】:

  • 我们可以看看您的 JSON 输出示例吗?
  • 我是一个 javascript 新手.. 我不知道如何获得实际的 JSON 输出.. 它是由 cakephp 生成的.. 关于如何去做的任何建议?我正在搜索 show json 输出,但没有任何用处。感谢您在此方面的帮助
  • 你能发一下警报吗(typeof jsonarray+'\n'+jsonarray.length+'\n'+jsonararray);
  • 谢谢..我用最后一个信息更新了帖子,警报(jsonarray)不起作用
  • @Rick:如果 JSON 数据来自 CakePHP 输出,你能不能直接导航到页面并查看输出?

标签: javascript jquery arrays search


【解决方案1】:

好吧,现在我决定使用一种方法来展平 javascript 中的数组并以这种方式预处理数据,因为我无法弄清楚如何在 javascript 中执行此操作。我发现了这个:

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

这应该使我能够继续解决这个问题,但如果有人知道如何直接在 javascript 中完成我想要做的事情(在嵌套数组中搜索),我很感兴趣

【讨论】:

    【解决方案2】:

    我仍然不能完全确定您在问什么,所以这里有一些假设和快速解决方案。

    1. 您正在该数据块中寻找@​​987654321@s
    2. blob 可以任意深
    3. 如果你找到一个,你想在同一“行”中获取divid的值
    4. 找到的第一个是获胜者

    现在组合一个小递归函数:

    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;
    }      
    

    输入您的确切 JSON:

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

    我们现在可以查找4 中的uiemail_id,得到upd3 中对应的divid

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

    这可能很脆弱,当然可以改进,但也许它会给你一个攻角。

    【讨论】:

    • 感谢您的信息。实际上我只是放弃了这一点,只是在 PHP 端将数组预先分解为“普通”数组,然后将它们发送到 javascript
    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多