【问题标题】:JSON - If Object's Value EqualsJSON - 如果对象的值等于
【发布时间】: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


【解决方案1】:

我为您做了一个非常基本的示例,根据类别将名称加载到表的列中。

var 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 }
    ]
}
for (var i = 0; i < json.profiles.length; i++) {
    var obj = json.profiles[i];
    if (obj.category == 1) {
        $("#content").append("<tr><td>" + obj.firstName + " " + obj.lastName + "</td><td></td></tr>");
    }
    else if (obj.category == 2) {
        $("#content").append("<tr><td></td><td>" + obj.firstName + " " + obj.lastName + "</td></tr>");
    }
}
table, tr, td, th{border: 1px solid black; border-collapse:collapse;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table>
    <thead>
        <tr>
            <th>Category 1</th>
            <th>Category 2</th>
        </tr>
    </thead>
    <tbody id="content">
            
    </tbody>
    <tbody>

    </tbody>
</table>

这是排序对象属于哪个类别,然后提取名字和姓氏的部分。在我的示例中,它只是将其放入表的列中,但是一旦数据被提取,您就可以对数据执行任何操作。

for (var i = 0; i < json.profiles.length; i++) {
    var obj = json.profiles[i];
    if (obj.category == 1) {
        $("#content").append("<tr><td>" + obj.firstName + " " + obj.lastName + "</td><td></td></tr>");
    }
    else if (obj.category == 2) {
        $("#content").append("<tr><td></td><td>" + obj.firstName + " " + obj.lastName + "</td></tr>");
    }
}

基本上,你的代码中有循环,你只需要添加一个条件语句来检查对象属于哪个类别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 2020-07-19
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多