javascript:将相同的键映射到不同的数组

时间:2015-06-04 15:51:05

标签: javascript html arrays key

我正在尝试使用纯java脚本在第一个下拉列表(产品)中选择一个选项来填充下拉列表。但是在将相应的文件映射到产品方面受到了打击,特别是当不同产品的相同版本号重复时

以下是数据集。

 productA => version1.0.0 => FileA1.zip
 productA => version1.0.1 => FileA2.zip

 productB => version3.5.0 => FileB1.zip
 productB => version4.0.1 => FileB2.zip

 productC => version1.0.0 => FileC1.zip
 productC => version1.0.1 => FileC2.zip

我的javascript数组

 var ProductNameMap = {
        "ProductA":["1.0.0","1.0.1"],
        "ProductB":["3.5.0","4.0.1"], 
        "ProductC":["1.0.0","1.0.1"],   
};

//want to map files specifically associated with particular product
var ProductSeriesMap = {
    "version1.0.0":["FileA1.zip"],
    "version1.0.1":["FileA2.zip"]
    };

如何在此映射过程中区分ProductA => version1.0.0ProductC => version1.0.0

我的HTML

 <html>
 <body>
   Product:
<select id="product" onchange="changeproduct">
    <option>--Choose Product--</option>
</select><br/>
Version:<select id="version"  onchange="changeversion" ></select><br/>
File:<select id="file"></select>
<script>
//have my java script here to populate dropdowns 
</script>

  

4 个答案:

答案 0 :(得分:3)

将它全部放在一个结构中

var ProductsMap = {
        "ProductA":{"1.0.0":"File1-a1.zip","1.0.1":"File-a2.zip"},
        "ProductC":{"1.0.0":"File-c1.zip","1.0.1":"File-c2.zip"},   
};

当用户选择ProductA时,您拥有所有版本和相关文件

ProductsMap.ProductA

当用户选择ProductC时,您拥有所有版本和相关文件

ProductsMap.ProductC

答案 1 :(得分:1)

var ProductSeriesMap={
"ProductA": new Map{"version1.0.0":["FileA1.zip"],"version1.0.1":["FileA2.zip"]},
"ProductB": new Map{"version1.0.0":["FileA1.zip"],"version1.0.1":["FileA2.zip"]},
}

你需要像这样创作;

Map[key,Map[key,value]];

答案 2 :(得分:1)

我认为稍微改变一下你的物体会有所帮助。您可以使用for循环迭代此结构(如果目标浏览器支持,则使用Object.keys(products))。只需调整即可满足您的确切需求。

var products = {
    "A": [
        { "1.0.0": "FileA1.zip" },
        { "1.0.1": "FileA2.zip" }
    ],
    "B": [
        { "3.5.0": "FileB1.zip" },
        { "4.0.1": "FileB2.zip" }
    ],
    "C": [
        { "1.0.0": "FileC1.zip" },
        { "1.0.1": "FileC2.zip" }
    ]
}

答案 3 :(得分:0)

您的数组实际上是对象。我不明白为什么你没有直接在数据集中的javascript对象中将所有东西映射到一起,因为你的第二个“数组”确实会丢失所有产品痕迹,这些产品无法检索到有一个标准的结构。

您的Javascript对象结构可能类似于:

var ProductNameMap = {
        "ProductA":[{"version":"1.0.0","fileName":"FileA1.zip"},{"version":"1.0.1","fileName":"FileA2.zip"}],
        "ProductB":[{"version":"3.5.0","fileName":"FileB1.zip"},{"version":"4.0.1","fileName":"FileB2.zip"}], 
        "ProductC":[{"version":"1.0.0","fileName":"FileC1.zip"},{"version":"1.0.1","fileName":"FileC2.zip"}]   
};

根据您的需要,其他结构是可能的,但没有上下文,很难指出一个是最好的...基本上如果您需要订购集合(如版本的继承),您将需要使用数组和订单无关紧要的集合,对象很好。