包含JSON文件中键值对的数组索引

时间:2014-09-26 00:22:33

标签: javascript ajax json

如何编写一个搜索JSON文件的函数来查找存在包含特定键值对的对象的索引?例如,如果我们查找0,则函数将返回value: '100.0'以查找key1,因为0位于索引var object = { key1 : { name : 'xxxxxx', value : '100.0' }, key2 : { name : 'yyyyyyy', value : '200.0' }, key3 : { name : 'zzzzzz', value : '500.0' }, }

{{1}}

3 个答案:

答案 0 :(得分:1)

这对你来说有点小提琴:

http://jsfiddle.net/qskt9Lg9/

function findInJson(key1, value) { //pass it the desired matching key value pairs
    var i = 0;
    for (var key in object) {  //this will iterate through key1 - key3
        var current = object[key];
        if (current[key1] == value) {
            return i; //return the index
        }
        i++;//increment if no found
    }
   return -1;
}

你可以这样称呼它:

findInJson("name", "xxxxxx")

此网站:http://crunchify.com/how-to-iterate-through-jsonarray-in-javascript/为您提供了有关如何解析JSON的更多信息。

答案 1 :(得分:0)

如果保证您的对象中的密钥不会被删除并在以后添加,您可以使用:

function (object, key, value) {
    var index = 0;

    for (var oKey in object) {
        if (object[oKey][key] === value) {
            return index;
        }

        index++;
    }

    return -1;
}

但是for..in语句以任意顺序迭代对象。有关详细说明,请参阅:“已删除,添加或修改的属性”部分。

如果您希望保留订单,最好使用数组并将“keyN”放入{name,value}对象中。

答案 2 :(得分:0)

如果您对支持IE8及以下版本不感兴趣,那么您可以使用Object.keys()方法,如:

function getIndex(val) {
    for (i = 0; i < Object.keys(object).length; i++) {
        if (object[Object.keys(object)[i]].value === val) {
            return i;
        }
    };
    return -1;
};
console.log( getIndex("100.0") ); // returns  0
console.log( getIndex("500.0") ); // returns  2
console.log( getIndex("800.0") ); // returns -1

参见 JSFIDDLE