首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代JSON对象以获得自动补全建议

迭代JSON对象以获得自动补全建议
EN

Stack Overflow用户
提问于 2012-07-07 01:13:33
回答 3查看 2.1K关注 0票数 0

我收到以下对象,它是我从源接收到的-

代码语言:javascript
复制
["road",[["road",53,"0E"],["roadtrip",53,"1E"],["roadrunner",53,"2E"],["roadster",53,"3E"],["roadside",53,"4E"],["roadrage",53,"5E"],["roadcycling",53,"6E"],["roadsideamerica",53,"7E"]],{"k":1,"q":"lpxvQlflqTsJ-2_PMBLImSpu1PU"}]

我想要从对象获取的值:

代码语言:javascript
复制
road, roadtrip, roadrunner, roadster and so on.

下面是代码

代码语言:javascript
复制
    $('#query').autocomplete({
        source: function( request, response ) {
        $.ajax({
        type: "GET",
        url: , // url for the source
        dataType: "json",
        data: { 
            "tags" : request.term
        },
        success: function( data ) {
            related = data[1];
            response(data[1][0]);
        }
        });
    }

但是我只从对象的第一个数组中获得值?例如。road OE

应该如何迭代来获取它的值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-07 01:19:30

这是一个数组,而不是一个对象,如果你JSONLint它:

代码语言:javascript
复制
[
    "road",
    [
        [
            "road",
            53,
            "0E"
        ],
        [
            "roadtrip",
            53,
            "1E"
        ],
        [
            "roadrunner",
            53,
            "2E"
        ],
        [
            "roadster",
            53,
            "3E"
        ],
        [
            "roadside",
            53,
            "4E"
        ],
        [
            "roadrage",
            53,
            "5E"
        ],
        [
            "roadcycling",
            53,
            "6E"
        ],
        [
            "roadsideamerica",
            53,
            "7E"
        ]
    ],
    {
        "k": 1,
        "q": "lpxvQlflqTsJ-2_PMBLImSpu1PU"
    }
]

可以看到,第一个键是字符串"road",第二个键是一个数组,最后一个键是一个对象。

您要查找的项是主数组的第二个键中的数组的第一个键。

尝试如下所示:

代码语言:javascript
复制
$('#query').autocomplete({
    source: function( request, response ) {
    $.ajax({
    type: "GET",
        url: , // url for the source
        dataType: "json",
        data: { 
            "tags" : request.term
        },
        success: function( data ) {
            var terms = [];

            for (var i=0; i < data[1].length; i++) {
                terms.push(data[1][i][0]);
            }

            respond(terms);
        }
    });
}
票数 1
EN

Stack Overflow用户

发布于 2012-07-07 01:46:40

这将为您提供您正在寻找的所有元素。然后如何迭代它们由您决定:

代码语言:javascript
复制
jQuery.map(data[1], function(item) {return item[0];});
// output: ["road", "roadtrip", "roadrunner", "roadster", ... ]

顺便说一下,对于那些说“它不是一个对象,它是一个数组”的人来说,数组在JS中是一种对象类型。

--斯科特

票数 1
EN

Stack Overflow用户

发布于 2012-07-07 01:19:35

提供的数据不是对象。您有一个数组,它通过使用括号'..‘来表示。此外,对象还具有属性和值,即{ "road": 53 }

假设您有一个格式正确的对象,那么您可以在jQuery中使用$.getJSON()函数。

然后,您可以遍历有效的对象并相应地访问所需的属性。

HTML

代码语言:javascript
复制
<div></div>

jQuery:

代码语言:javascript
复制
var obj = {     
    "road": [
        {
            "name": "roadtrip"
        },
        {
            "name": "roadrunner"
        }
    ]
};

var data = obj.road;

for(var i=0; i < data.length; i++){
    $('div').append(data[i].name + '<br>');
}

演示:http://jsfiddle.net/6S6DJ/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11366778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档