2014-09-26 128 views
0

我該如何編寫一個函數來搜索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

回答

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

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

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