如何编写一个搜索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}}
答案 0 :(得分:1)
这对你来说有点小提琴:
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