如何使用jQuery将JSON数据推送到数组中?

时间:2016-06-08 16:30:26

标签: javascript jquery arrays json

我是jQuery的新手,我正在尝试getJSON函数。我想要做的是拉出JSON文件的“id”部分并将其推入jQuery中名为planes的数组中。从那里,该数组用于自动完成功能,以填充可搜索的ID。

var planes = [];
$.getJSON('planes.json', function(data) {
    console.log('Filling array...');

//This is where I think the issue is occurring. 
//Is using the name of the section you want to use the correct syntax here?
    $.each(data.id, function (index, val) {
        planes.push(val.id);
        console.log('Pushed ' + index);
    });
});

// After getJSON, array should look something like this:
// var planes = [
//  'Alara',
//  'Fiora',
//  'Innistrad',
//  'Kamigawa',
//  'Lorwyn',
//  'Mirrodin',
//  'Ravnica',
//  'Shandalar',
//  'Zendikar'
// ];

JSON文件的排列如下:

[ 
    {"id": "Ravnica"},
    {"id": "Lorwyn"},
    {"id": "Innistrad"},
    {"id": "Zendikar"},
    {"id": "Kamigawa"},
    {"id": "Mirrodin"},
    {"id": "Shandalar"},
    {"id": "Alara"},
    {"id": "Fiora"}
]

Plunker

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

你几乎拥有它,虽然你正在循环data.id这不是你想要做的事情。您应该循环浏览data,然后推送val.id

如果你想要循环遍历data.id,那么你的json就必须这样构建:

{
    "id": [
        "things",
        "to",
        "loop",
        "through"
    ]
}

..但事实并非如此,所以只需循环访问数据。

答案 1 :(得分:0)

请检查以下解决方案。我有硬编码的平面数据,而不是从文件中获取,但解决方案是相同的。你只需要通过迭代数据而不是data.id来更新你的$ .each行(这是你的错误代码很好)。

var data = [{
  "id": "Ravnica"
}, {
  "id": "Lorwyn"
}, {
  "id": "Innistrad"
}, {
  "id": "Zendikar"
}, {
  "id": "Kamigawa"
}, {
  "id": "Mirrodin"
}, {
  "id": "Shandalar"
}, {
  "id": "Alara"
}, {
  "id": "Fiora"
}];
var planes = [];
//surround this each with your $.getJSON. I have just hardcoded json data instead of getting it from file
$.each(data, function(index, val) {
  planes.push(val.id);
});

console.log(planes);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

您的更新plunker链接Plunker

答案 2 :(得分:0)

您还可以查看本机数组映射方法,这样可以节省您创建数组然后将其推送到其中的过程。通过在每个项目上应用映射函数,它只返回给定原始数组的新数组。

$.getJSON("planes.json",function(data){
    console.log(data.map(function(plane){return plane.id;}))
}

但是,如果我没记错的话,这在IE&lt; = 8中不可用。