2015-06-04 3 views
0

Я пытаюсь заполнить раскрывающийся список (ы) при выборе варианта в первом раскрывающемся списке (продукте), используя чистый скрипт java. Но попался на сопоставление соответствующих файлов с продуктом, особенно когда один и тот же номер версии повторяется для разных продуктов.javascript: сопоставление одного и того же ключа с разными массивами

следующий - набор данных.

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.0 и ProductC => 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> 

ответ

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
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]]; 
+0

Следует отметить, что карты требуют несколько недавней поддержки браузера: http://kangax.github.io/compat-table/es6/#Map –

0

Ваши массивы на самом деле являются объектами. То, что я не понимаю, - это то, почему вы не сопоставляете все вещи в своем javascript-объекте напрямую из своего набора данных, потому что с вашим вторым «массивом» вы теряете все следы продуктов, которые не могут быть восстановлены, t имеют стандартную структуру.

Ваша структура объекта 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"}] 
}; 

Другие структуры возможны в зависимости от ваших потребностей, конечно, но без контекста, трудно указать один как лучший друг ... В принципе если вы требуемую коллекцию (например, последовательность версий), вам нужно будет использовать массив и для коллекции, где порядок не имеет значения, объект в порядке.

+0

Спасибо за ответ. И я сожалею о том, что не сделал контекста понятным. Когда пользователь выбирает productA в первом Dropbox, я хочу динамически заполнять версии во втором Dropbox. Когда он выбирает версию, я хочу заполнить соответствующие файлы для этой конкретной версии продукта. Можете ли вы помочь в достижении этого, используя этот вышеупомянутый массив? – Jill448

+0

Эта структура данных, безусловно, была бы лучшей для того, чего вы пытаетесь достичь, один из benjamin solum является тем же самым с ошибками синтаксиса (дополнительные запятые после последнего элемента массива), а остальные предложения не будут сохранять порядок. Оттуда вы уже должны попробовать что-то закодировать, если вы хотите получить какую-либо помощь здесь, так как я не буду кодировать это для вас ... –

1

Я думаю, что изменение ваших объектов немного поможет. Вы можете перебирать эту структуру с помощью цикла for 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" } 
    ] 
} 
+0

У вас есть дополнительные запятые после последнего элемента элемента массива, это плохой синтаксис. –

+0

Yep, Copy + Paste. Удалены. Благодарю. –

Смежные вопросы