在JavaScript上,我有以下JSON:
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"}
]
}
我尝试在Google上查找运行JavaScript对象搜索字符串的简单方法,但没有成功。据我所知,jQuery的$.inArray
也没什么。任何人有任何想法?
我正在考虑将这个JSON转换为字符串,grep它为用户输入的值,然后再将字符串转换为JSON,但我认为这对于易于实现的事情来说太麻烦了。
答案 0 :(得分: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;
});
答案 1 :(得分:1)
为什么不循环遍历数组,删除不匹配的东西?
答案 2 :(得分: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);
答案 3 :(得分: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");
}
答案 4 :(得分: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;
})
};