2011-05-30 38 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; 
    }) 
};