在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'
},
}
答
这里是你一个小提琴:
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
就注意到你'变种object'不是一个数组,但一个(n)(javascript)对象。了解更多http://javascriptissexy.com/javascript-objects-in-detail/ – JFK 2014-09-26 02:12:39