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

问题描述:

我该如何编写一个函数来搜索JSON文件以找到存在包含特定键 - 值对的对象的索引?例如,如果我们要查找value: '100.0',则函数将为以下JSON文档返回0,因为key1取决于索引0在JSON文件中包含键值对的数组索引

var object = { 
    key1 : { 
     name : 'xxxxxx', 
     value : '100.0' 
    }, 
    key2 : { 
     name : 'yyyyyyy', 
     value : '200.0' 
    }, 
    key3 : { 
     name : 'zzzzzz', 
     value : '500.0' 
    }, 
} 
+0

就注意到你'变种object'不是一个数组,但一个(n)(javascript)对象。了解更多http://javascriptissexy.com/javascript-objects-in-detail/ – JFK 2014-09-26 02:12:39

这里是你一个小提琴:

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的更多信息。

如果保证在你的对象一键不会被删除和添加后,你可以使用:

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}对象中。

如果你不感兴趣的支持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