在javascript对象上应用查询(例如正则表达式)以获取某些符合某些条件的数组或集合的子集的最佳方法是什么,jQuery是否有这样的插件,或者某种方式使用jQuery或其他已知的用于此目的的js库?
例如:
var x=[{ firstName: "Sakher",lastName="Sawan" }, { firstName: "John", lastName="Jan"}];
var y = ????;//the first names of the objects in x where their last names follow the regular expression : pla-pla-pla
答案 0 :(得分:2)
看起来你正在寻找JSONpath之类的东西。
答案 1 :(得分:1)
你应该使用像dojo这样的一些框架来进行这些操作。
查看示例网格
http://dojotoolkit.org/reference-guide/dojox/grid/DataGrid.html
你可以对此进行各种操作。
答案 2 :(得分:1)
似乎你可以通过JS本身来做到这一点:
var re = ...; // regular espression
var y = [....]; // input array
var x = y.filter(function(el) { return re.test(el.firstName) } );
在x
中,您将拥有过滤数组,其中每个元素都满足您的条件。
答案 3 :(得分:1)
检查this链接。
var jsonArray = [
{ "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" },
{ "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" },
{ "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" },
{ "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" }
]
// ["b_mskk:kabushiki kaisha", "c_bill:g", "d_linq:to objects"]
var queryResult = Enumerable.From(jsonArray)
.Where(function (x) { return x.user.id < 200 })
.OrderBy(function (x) { return x.user.screen_name })
.Select(function (x) { return x.user.screen_name + ':' + x.text })
.ToArray();
// shortcut! string lambda selector
var queryResult2 = Enumerable.From(jsonArray)
.Where("$.user.id < 200")
.OrderBy("$.user.screen_name")
.Select("$.user.screen_name + ':' + $.text")
.ToArray();
答案 4 :(得分:1)
使用jQuery:
var x = [
{ firstName: "Sakher",lastName:"Sawan" },
{ firstName: "John", lastName:"Jan"}
],
y = $(x).map(function(a, obj){
return /^S/.test(obj.lastName) ? obj.firstName : null
});
请注意,在某些浏览器中,您不必使用jQuery来执行此操作,因为您也可以在x.map
(旧浏览器不支持)的浏览器中使用Array.prototype.map