有没有一种简单的方法来创建javascript查找表?
我正在寻找一种简单的方法,使用javascript根据多个维度查找值: 例如(我将使用产品和产品选项来描述这一点,数据来自一个格式非常相似的数据库) 所以我在页面上有很多下拉列表有没有一种简单的方法来创建javascript查找表?,javascript,lookup-tables,Javascript,Lookup Tables,我正在寻找一种简单的方法,使用javascript根据多个维度查找值: 例如(我将使用产品和产品选项来描述这一点,数据来自一个格式非常相似的数据库) 所以我在页面上有很多下拉列表 Colour: Blue, Red Size: Small, Large 所以-我想知道…给定“蓝色+小”,价格是多少 我不知道下拉列表的顺序,也不知道从数据库中提取颜色和大小的顺序 javascript中的数据可以是如下所示的数组: {Colour:Blue, Size:Medium, Price:48},{
Colour: Blue, Red
Size: Small, Large
所以-我想知道…给定“蓝色+小”,价格是多少
我不知道下拉列表的顺序,也不知道从数据库中提取颜色和大小的顺序
javascript中的数据可以是如下所示的数组:
{Colour:Blue, Size:Medium, Price:48},{Colour:Blue, Size:Large, Price:82}
这是一个粗糙的例子,但我无法用javascript找到一个简单的方法来实现这一点。这可能吗
var data = {
1: {
2: {
3: 45
}
},
2: {
2: {
3: 98
}
}
};
console.log(data[1][2][3]); // 45
console.log(data[2][2][3]); // 98
// or
var A = 1, B = 2, C = 3;
console.log(data[A][B][C]); // still 45
最常见的解决方案是以O(N)方式在阵列上循环
var-filter={color:'blue',Size:'small'};
函数匹配\u筛选器(筛选器,项){
//您也可以在该函数上使用
//允许在筛选器中使用函数、正则表达式或任何您喜欢的内容。。。
for(过滤器中的var键){
if Object.prototype.hasOwnProperty.call(过滤器,键){
如果(项[键]!==过滤器[键]){
返回false;
}
}
}
返回true;
}
var筛选的_项目=[];
对于(var i=0;i,您可以在页面加载的二维地图中为价格编制索引(使用工作)
1) 我将select值放在查找表中,以防您必须预加载它们:
var tables = {
Colour: ["Blue", "Red"],
Size: ["Small", "Medium", "Large"]
};
2) 这是以数组形式显示的价格表:
var array = [
{Colour: "Blue", Size: "Small", Price: 45},
{Colour: "Blue", Size: "Medium", Price: 48},
{Colour: "Blue", Size: "Large", Price: 98},
{Colour: "Red", Size: "Small", Price: 65},
{Colour: "Red", Size: "Large", Price: 31}
];
3) 初始化选择(填充值和事件“更改”):
6) 调试(在Chrome或Firefox中点击F12打开控制台视图)
完整索引表:
console.log(map);
只是“蓝色”和“小”的价格:
console.log(map['Blue']['Small']); // outputs the value: 45
由于颜色+大小代表价格,我们可以通过提供如下索引值分别为颜色和大小创建枚举:
为什么是jQuery而不是简单的js?只是问一下……简单的js也可以……:)已经有很长的一天了,为什么要用jQuery做这件事?一个更简单的方法是使用多维javascript数组。当你通过时,1 2 3你如何得到45??还有,你尝试过什么?你面临的问题是什么?我认为我们需要更多地了解数据。对于小于X的A、B、C的所有值,是否都有查找值?如果是这样,那么您可以使用三维数组:var-answer=data[1][2][3]代码>或答案=数据[2][2][3]代码>。当然,你必须用合适的数据填充这个三维数组。A,B和C的值不是线性的,所以A的值可能是1,45,89…这对这个解决方案仍然有效吗?(这是我考虑过的,但可能对我写的东西考虑过了)@Paul,当然。我只是用对象文字符号构建一个对象。你可以用你想要的任何东西作为钥匙。也许您可以添加更多的数据,以便我们更好地了解您想要实现的目标。这几乎就是我的数据,每个记录有3个键值对,我试图通过传入3个键值对(每列一个)来定位该表中的记录…我认为我遇到的最大问题是列的顺序…我不一定知道,尽管我可能会重新排列我传递的内容in@Paul啊,是的,列的随机顺序是个问题。你从哪里/如何获得数据?数据来自数据库-我能想到的最好的描述方式可能是根据颜色和尺寸选择产品-颜色和尺寸在下拉列表中。您在页面上有一个下拉列表,但您不确定它们的顺序,您只知道颜色=4,大小=9谢谢。请注意,这行有打字错误>>'中等,不会称之为“简单”,但谢谢,相当合法吗?匹配\u过滤器或匹配的\u过滤器。下次看到类似的内容时,请随时提出编辑建议。小的打字错误通常不能作为编辑提交(没有足够的更改)
for (var key in tables)
if (tables.hasOwnProperty(key)) {
selects[key] = form[key];
selects[key].addEventListener("change", updateSpan);
var values = tables[key];
len = values.length;
for (i = 0; i < len; i++) {
var option = document.createElement('option');
option.appendChild(document.createTextNode(values[i]));
form[key].appendChild(option);
}
}
len = array.length;
for (i = 0; i < len; i++) {
var record = array[i];
if (typeof map[record.Colour] === 'undefined')
map[record.Colour] = {};
map[record.Colour][record.Size] = record.Price;
}
function updateSpan() {
var Colour = selects.Colour.options[selects.Colour.selectedIndex].value;
var Size = selects.Size.options[selects.Size.selectedIndex].value;
if (typeof map[Colour] !== 'undefined' && typeof map[Colour][Size] !== 'undefined')
span.textContent = map[Colour][Size];
else
span.textContent = "Price not defined to Colour: " + Colour + " and Size: " + Size + ".";
}
console.log(map);
console.log(map['Blue']['Small']); // outputs the value: 45
const color = {
BLUE: 0,
RED: 1
}
const size = {
SMALL : 0,
LARGE : 1
}
Value assignments:
var prices[10][2];
prices[color.BLUE][size.SMALL] = 40;
prices[color.BLUE][size.LARGE] = 80;