【发布时间】:2015-01-05 19:56:31
【问题描述】:
在我的 JSON 文件中,我有一个对象,其中包含多个对象的数组。如果对象的值等于某个数字,我想调用一个函数。如果相等,则仅具有该值的对象将被输入到选定的 div。解决此问题的最佳方法是什么?
示例:
我有一个“配置文件”对象,想知道对象“类别”是否等于数字“1”。如果是这样,请将这些对象输入到第一个“.contentBox .viewed”中。如果“类别”对象等于数字“2”,则将这些对象输入到第二个“.contentBox .viewed”中。
JSON 数据:
{
"profiles": [
{ "firstName" : "John", "lastName" : "Doe", "gender": "male", "category": 1 },
{ "firstName" : "Jane", "lastName" : "Austen", "gender": "female", "category": 1 },
{ "firstName" : "Alexander", "lastName" : "Beth", "gender": "male", "category": 1 },
{ "firstName" : "Sarah", "lastName" : "Kelly", "gender": "female", "category": 2 },
{ "firstName" : "Rachel", "lastName" : "Haiworth", "gender": "female", "category": 2 },
{ "firstName" : "Thomas", "lastName" : "Alfae", "gender": "male", "category": 2 },
{ "firstName" : "William", "lastName" : "Lee", "gender": "male", "category": 2 }
]
}
当前 JS 示例:
xhr.onload = function() {
if (xhr.status === 200) {
responseObject = JSON.parse(xhr.responseText);
responseObject.profiles.sort(function(a, b) {
return SortAlphabetically(a.firstName, b.firstName);
});
var newViewers = '';
for (var i = 0; i < responseObject.profiles.length; i++) {
newViewers += '<span class="user">' + responseObject.profiles[i].firstName + ' ';
newViewers += responseObject.profiles[i].lastName + '</span>';
newViewers += ' ';
}
//Update Page With New Content
var viewerSection = $('div.viewed');
viewerSection.html(newViewers);
checkViewers();
}
};
xhr.open('GET', 'data.json', true);
xhr.send(null);
我不确定类似"profiles.category.val() === 1" 的方法是否可行,或者是否有更好的路线。
查看当前完整的Plunker。
【问题讨论】:
-
JS的默认排序不是按字母排序吗?
-
只是
profile[i].category虽然您可能想使用 Array#filter 可以让您的生活更轻松(谷歌 mdn 过滤器) -
if (responseObject.profiles[i].category == 1) -
.val()用于获取(或设置)表单控件元素的值,而不是用于处理对象
标签: javascript jquery arrays json object