我正在寻找一个用GWT或Javascript编写的库,它允许我将数据放到某种结构中,这样就可以进行类似数据库的查询。
例如,我可能会存储一些记录,然后提出类似的问题,给我所有符合特定条件的记录。
优化级别不太重要......例如,扫描可能适用于大多数应用程序,因为此代码将在少量数据上运行客户端。
答案 0 :(得分:0)
对于富Web应用程序开发人员来说,TrimPath的 TrimQuery 引擎是一个轻量级的GPL / APL开源组件,可让您在Web浏览器中运行时获得SQL查询的强大功能。
...虽然对于你声明的目标,似乎很容易循环遍历对象数组,可能使用一种新的ES5 Array
方法,如filter
(这些方法很容易添加在没有本机副本的浏览器中运行)。例如,如果你有一个代表汽车的对象数组,那么你会得到蓝色的对象:
// Get only blue cars
var blueCars = store.filter(function(entry) {
return entry.color === "blue";
});
或者如果您不想担心将filter
添加到旧浏览器,只需使用简单的for
循环:
var blueCars, index, entry;
blueCars = [];
for (index = 0; index < store.length; ++index) {
entry = store[index];
if (entry && entry.color === "blue") {
blueCars.push(entry);
}
}
这是store
我正在运行其中任何一个:
// The data store
var store = [
{color: "blue", make: "Toyota"},
{color: "red", make: "Toyota"},
{color: "green", make: "Toyota"},
{color: "blue", make: "Ford"},
{color: "silver", make: "Ford"},
{color: "blue", make: "Jaguar"},
{color: "red", make: "Jaguar"},
{color: "green", make: "Fiat"}
];
这里是如何添加filter
如果它本身不存在(袖口实现,你可能会寻找像es5-shim这样的库,试图做更彻底的工作,或者只是使用一个简单的for
循环):
// Add `filter` if not already there
if (typeof Array.prototype.filter === "undefined") {
(function() {
display("(Added <code>filter</code>, browser didn't have it natively)");
function Array$filter(callback, thisArg) {
var index, value, result;
result = [];
for (index = 0; index < this.length; ++index) {
if (this.hasOwnProperty(index)) {
value = this[index];
if (callback.call(thisArg, value, index, this)) {
result.push(value);
}
}
}
return result;
}
if (typeof Object.defineProperty !== "undefined") {
Object.defineProperty(Array.prototype, "filter", {
enumerable: false
});
}
else {
Array.prototype.filter = Array$filter;
}
})();
}