Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种简单的方法来创建javascript查找表?_Javascript_Lookup Tables - Fatal编程技术网

有没有一种简单的方法来创建javascript查找表?

有没有一种简单的方法来创建javascript查找表?,javascript,lookup-tables,Javascript,Lookup Tables,我正在寻找一种简单的方法,使用javascript根据多个维度查找值: 例如(我将使用产品和产品选项来描述这一点,数据来自一个格式非常相似的数据库) 所以我在页面上有很多下拉列表 Colour: Blue, Red Size: Small, Large 所以-我想知道…给定“蓝色+小”,价格是多少 我不知道下拉列表的顺序,也不知道从数据库中提取颜色和大小的顺序 javascript中的数据可以是如下所示的数组: {Colour:Blue, Size:Medium, Price:48},{

我正在寻找一种简单的方法,使用javascript根据多个维度查找值:

例如(我将使用产品和产品选项来描述这一点,数据来自一个格式非常相似的数据库)

所以我在页面上有很多下拉列表

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;