以下是我桌子的一小部分样本。我将收集用户数据,并返回一个费率。是否有库或模块来执行此类查询,或者我是否必须手动编写某些内容?因此,如果我的用户是23,goodDriver,没有房屋保险,那么房价应该回到2.00。这需要在客户端,并在Chrome,FF,Safari和IE 9中工作。感谢
var rateTable = [
["lowerAge", "upperAge", "goodDriver", "hasHomeInsurance", "rate"],
["20", "30", true, true, 1.00],
["20", "30", true, false, 2.00],
["20", "30", false, true, 3.00],
["20", "30", false, false, 4.00]
]
答案 0 :(得分:1)
您希望重新构建数据,以便拥有一组对象,这样可以更轻松地运行简单查询。
这
var rateTable = [
["lowerAge", "upperAge", "goodDriver", "hasHomeInsurance", "rate"],
["20", "30", true, true, 1.00],
["20", "30", true, false, 2.00],
["20", "30", false, true, 3.00],
["20", "30", false, false, 4.00]
];
到
var rates = [{
lowerAge: "20",
upperAge: "30",
goodDriver: true,
hasHomeInsurance: true,
rate: 1.00,
}, {
lowerAge: "20",
upperAge: "30",
goodDriver: true,
hasHomeInsurance: false,
rate: 2.00,
}, {
lowerAge: "20",
upperAge: "30",
goodDriver: false,
hasHomeInsurance: true,
rate: 3.00,
}, {
lowerAge: "20",
upperAge: "30",
goodDriver: false,
hasHomeInsurance: false,
rate: 4.00,
}];
如果您事先无法进行转换,请参阅以下内容:
var rates = rateTable.slice(1).map(function (row) {
return this.reduce(function (obj, key, index) {
obj[key] = row[index];
return obj;
}, {});
}, rateTable[0]);
至于转换后查询数据,这里有一个例子:
function getRate(age, goodDriver, hasHomeInsurance) {
var rate = rates.find(function (rate) {
return age >= rate.lowerAge &&
age <= rate.upperAge &&
rate.goodDriver === goodDriver &&
rate.hasHomeInsurance == hasHomeInsurance;
});
return rate && rate.rate;
}
编辑:我应该补充一点,Array.prototype.find并不是在任何地方都支持,但可以用一个简单的循环代替。请参阅this问题。
答案 1 :(得分:0)
正如其他人所说,我强烈建议您使用mySQL 。但是,你有一个对我来说很有趣的问题,所以我试着解决它。
这不是最有效的方法,但你去了。
您可以遍历数组中的每一行,并检查所有值是否与您要检查的值相对应。
该功能可以这样工作:
function getRate(){
// get all the values
var age = parseInt($('#age').val());
var goodDriver = $('input[name="goodDriver"]:eq(1)').is(':checked');
var insurance = $('input[name="insurance"]:eq(1)').is(':checked');
// check each row for a match
for(var i=0; i<rateTable.length; i++){
var row = rateTable[i];
// if one is found, return the rate
if (row[0]<=age && row[1]>=age && row[2]==goodDriver && row[3]==insurance)
return row[4];
}
// if no match was found
return false;
}
我删除了表格中age
周围的引号,将它们作为整数进行比较。