2011-05-30 42 views
0

特定字符串的JavaScript的,我有以下的JSON:尋找使用JavaScript

var mJSON = { 
    "monster":[ 
     {"id":"150","name":"Richard"}, 
     {"id":"100","name":"Gregory"}, 
     {"id":"200","name":"Rachel"}, 
     {"id":"250","name":"Mike"} 
    ] 
} 

我需要用戶輸入的字符串來完善這一對象。例如:「100」。 結果應該是一個新的JSON這樣的:

var zJSON = { 
    "monster":[ 
     {"id":"100","name":"Gregory"} 
    ] 
} 

我試圖尋找在谷歌上簡單的方法通過一個JavaScript對象搜索字符串來運行,但沒有成功。據我所知,沒有什麼像jQuery的$.inArray。任何人有任何想法? 我正在考慮將這個JSON轉換爲一個字符串,grep它爲用戶輸入的值,然後再次將字符串轉換爲JSON,但我認爲這將是一件容易實現的東西太麻煩。

+5

這不是一個「JSON對象」,它是一個對象字面值。 JSON是用於表示數據的文本格式。 – Guffa 2011-05-30 21:13:06

+0

你其實是對的。感謝您指出。 :-) – astro11 2011-05-30 22:44:14

回答

4

如何使用$.map

var id = 100; 
var result = $.map(monsters, function(monster){ 
    return monster.id == id ? monster : null; 
}); 

JQuery.map()函數適用於陣列(monsters)的每個參數,併產生包含由該函數返回的值的新的數組。在這種情況下重要的是,如果函數返回null那麼該元素將從結果數組中移除。

編輯: 由於@Jan已經在他的評論$.grep好心建議更好!這是給你的怪物的代碼示例:

var id = 100; 
var result = $.grep(monsters, function(monster){ 
    return monster.id == id; 
}); 
+0

鏈接(和示例)的+1 +1然而,這個*命名錯誤的結構*應該稱爲'flatMap',因爲它更好地反映了語義。 – 2011-05-30 21:07:54

+1

請勿使用jquery.map。使用jquery.grep! – Jan 2011-05-30 21:18:29

+0

@Jan:[$ .grep](http://api.jquery.com/jQuery.grep)很漂亮! – 2011-05-30 21:28:14

1

爲什麼不通過數組刪除不匹配的東西?

1

不使用庫,你可以做這樣的事情:

var mJSON = { 
    "monster":[ 
     {"id":"150","name":"Richard"}, 
     {"id":"100","name":"Gregory"}, 
     {"id":"200","name":"Rachel"}, 
     {"id":"250","name":"Mike"} 
    ] 
}; 

var searchTerm = "100"; 

var result = mJSON.monster.filter(function(e){ 
    // if you want loose(r) searches, you could use a regex here 
    // rather than explicit equality 
    if(e.id == searchTerm) 
    { 
     return true; 
    } 
}); 
console.log(result); 

http://jsfiddle.net/dbrecht/MZQzM/

+2

+1但是,這在標準ECMAScript ed3中不起作用。 'filter'增加了ECMAScript 5th Edition(一些瀏覽器可能支持的時間較長),所以在開發時需要考慮到這一點。 – 2011-05-30 21:14:18

+0

很高興知道..並沒有真正檢查這是什麼規範介紹:) – 2011-05-30 21:15:12

0
var mJSON = { 
    "monster":[ 
     {"id":"150","name":"Richard"}, 
     {"id":"100","name":"Gregory"}, 
     {"id":"200","name":"Rachel"}, 
     {"id":"250","name":"Mike"} 
    ] 
}; 
var searhKey = "100"; 

var found = false, i = 0, pos = -1, l = MJSON.monster.length; 
while(!found && i < l) { 
    if(MJSON.monster[i].id == searchKey) { 
     pos = i; 
     found = true; 
    } 
    i += 1; 
} 
if(found) { 
    alert(pos); 
} else { 
    alert("not found"); 
} 
0

使用grep方法。例如:

var obj = { 
    monster: [ 
    { id: "150", name: "Richard" }, 
    { id: "100", name: "Gregory" }, 
    { id: "200", name: "Rachel" }, 
    { id: "250", name: "Mike" } 
    ] 
}; 

var input = "100"; 

var filtered = { 
    monster: $.grep(obj.monster, function(e){ 
    return e.id == input; 
    }) 
};