在JSON对象的数组中找到一个值

Scr*_*ode 15 javascript json

我从JSP获得了JSON对象数组

"Titles":[                          
    {
    "Book3" : "BULLETIN 3"
    }   
    ,
    {
    "Book1" : "BULLETIN 1"
    }
    ,
    {
    "Book2" : "BULLETIN 2"
    }    
]
Run Code Online (Sandbox Code Playgroud)

在JS方面,它被解析,我看到一个包含3个对象的数组.现在,我想在传递String键时找到/识别一个值.

例如,当我通过"Book2"时,我应该得到"BULLETIN 2"的价值.有人可以帮我确定方法吗?

Ale*_* T. 8

试试这个

var data = {
    "Titles": [{
        "Book3": "BULLETIN 3"
    }, {
        "Book1": "BULLETIN 1"
    }, {
        "Book2": "BULLETIN 2"
    }]
};

function getValueByKey(key, data) {
    var i, len = data.length;
    
    for (i = 0; i < len; i++) {
        if (data[i] && data[i].hasOwnProperty(key)) {
            return data[i][key];
        }
    }
    
    return -1;
}

console.log(getValueByKey('Book2', data.Titles));
Run Code Online (Sandbox Code Playgroud)


rub*_*nx9 5

有:

var x = [{
    "Book3" : "BULLETIN 3"
}, {
    "Book1" : "BULLETIN 1"
}, {
    "Book2" : "BULLETIN 2"
}];
Run Code Online (Sandbox Code Playgroud)

var key = "Book1";
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法获取值:

x.filter(function(value) {
    return value.hasOwnProperty(key); // Get only elements, which have such a key
}).shift()[key]; // Get actual value of first element with such a key
Run Code Online (Sandbox Code Playgroud)

请注意,如果对象没有定义这样的键,它将抛出异常.

此外,如果有更多具有此类键的对象,则仅返回第一个对象.如果需要从具有此键的对象获取所有值,则可以执行以下操作:

x.filter(function(value) {
    return value.hasOwnProperty(key); // Get only elements, which have such a key
}).map(function(value) {
    return value[key]; // Extract the values only
});
Run Code Online (Sandbox Code Playgroud)

这将为您提供仅包含适当值的数组.

此外,如果您正在使用jQuery,您可以使用grep而不是filter:

jQuery.grep(x, function(value) {
    return value.hasOwnProperty(key);
}) /* and so on */;
Run Code Online (Sandbox Code Playgroud)