使用JavaScript查看特定字符串的对象

时间:2011-05-30 20:58:04

标签: javascript jquery string json

在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,但我认为这对于易于实现的事情来说太麻烦了。

5 个答案:

答案 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);

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

答案 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;
  })
};