Прежде чем представить основной текст, я добавлю вам некоторые знания:
JS -картезианский алгоритм продукта
Генерировать картезианский продукт из данного объекта или массива
// Комбинированная функция сочетания декарта (список) {// родительский предыдущий индекс; count pointer point = {}; var result = []; var pindex = null; var tempcount = 0; var temp = []; // генерировать объекты указателя на основе параметров параметров для (var in list) {if typeof [index] = = = = = {index] = = = = = = = = = {index] = = = = = = = = = = {index) {'' Parent ': pindex,' count ': 0} pindex = index;}} // Одномерная структура данных непосредственно возвращает if (pindex == null) {return List;} // Динамическая генерация декартового продукта while (true) {for (var in list) {tempcount = точка [index] ['count']; temp.push (list [index] [tempcount]);} // Нажмите на результат массива результатов. push (temp); temp = []; // Проверьте задачу значения максимального указателя, в то время как (true) {if [index] [Count ']+1> = список [index]. точка [index] ['parent']; if (pindex == null) {return result;} // назначить родитель, чтобы проверить снова index = pindex;} else {point [index] ['count'] ++; break;}}}}}}}}}}}}}}}}}}}}}}}}}}}}}Хорошо, алгоритм картезианского генерации JS - это просто заложить основу для следующего текста. Я не скажу много, поэтому вернусь к делу.
1. Описание требований
Функция выпуска продукта на веб-сайтах электронной коммерции, аналогичной странице сведений о продукте JD.com, как показано на рисунке ниже, как такая выбираемая функция генерируется в фоновом режиме? На самом деле, iPhone 6, который вы видите, является не просто продуктом при его выпуске, но и многие, потому что цена каждого выбранного iPhone 6 отличается, поэтому при публикации продукта эти дополнительные элементы выбираются из кучи атрибутов и значений атрибутов. Проблема заключается в том, что количество атрибутов, выбранных во время публикации, отличается, а значения атрибутов также различны. Тогда количество генерируемых продуктов объединяется на основе атрибутов и значений атрибутов.
2. Прямо загрузить код прямо
<script>/*** Тип атрибута продукта*Количество атрибутов неясно*/var spec = function (specname, specitems) {this.specname = specname; // Имя атрибута this.specitems = speciTems; // Численное значение - это массив, количество массивов является неопределенным} var result = []; // комбинировано в набор продукта/*** Опубликовать атрибут, выбранный для продукта, который является массивом спецификации, а число массивов неясно*объединен в различные продукты на основе этого выбранного атрибута*/var selec [{specname: «емкость», Specitems: ['16g', '64g', '128g']}, {specname: 'color', specitems: ['Top Gold', 'Silver', 'Black', 'pink']}, {specname: 'withne', spectems: ['United Kyndy', 'Mobile', 'Telecom'] Combome); (index <selectspec.length - 1) {var specitem = selectspec [index]; var key = specitem.specname; var elects = specitem.specitems; if (item.length == 0) {run (index+1, current);} для (var i = 0; i <ement.length; {}; newmap = $. specitem.specitems; if (item.length == 0) {result.push (current);} for (var i = 0; i <ement.length; i ++) {if (! itse [i]) продолжить; var newmap = {}; newmap = $. элементы [i]; result.push (newmap);}}} combine (0, {}); console.info (result);/** объединен в набор продуктов * [объект {емкость = "16g", color = "tulujin", network = "Universal"}, * объект {емкость = "16G", ",", ", * upect =", ",", ",", ",", ",", ",", ",", * лент = ". Object {емкость = "16g", color = "大天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天天 � object {емкость =" 16g ", color =" black ", network =" telecom "}, * object {емкость =" 16g ", color =" pink ", network =" unicom "}, * object {емкость =" 16g ", color =" pink ", сеть =" мобильный »}, * obj Network = "telecom"}, * Object {apit = "64G", color = "}, * object {емкость =" 64G ", color =" telecom "}, * объект {емкость =" 64G ", color =" Clorecom wold ", сеть =" telecom "}, * obj Емкость = "64G", color = "silver", network = "mobile"}, * object {емкость = "64g", color = "silver", network = "telecom"}, * object {емкость = "64g", color = "black", network = "Unicom"}, * объект {емкость = "64g", color = "Black", network = "Mobile"}, * Object {емкость = "64G", Color = "," network = "}, * Object {емкость =" 64G ", Color =", "wapive", ". Color = "black", network = "telecom"}, * object {ofty = "64g", color = "black", network = "telecom"}, * object {емкость = "64g", color = "pink", network = "unicom"}, * объект {емкость = "64g", color = "pink", network "}, * объект {емкость =" 64G ",", "Pink", network = "," wapive {Quipt = "64". Network = "Telecom"}, * Object {емкость = "128G", color = "telecom"}, * Object {емкость = "128G", color = "Telecom"}, * Object {емкость = "128G", Color = "Telecom"}, * Object {емкость = "128G", color = "telecom"}, * object {Quipt wappe = "128", "128". network="Unicom"}, * Object { Capacity="128G", color="Silver", network="Mobile"}, * Object { Capacity="128G", color="Silver", network="Telecom"}, * Object { Capacity="128G", color="Black", network="Unicom"}, * Object { Capacity="128G", color="Black", network="Mobile"}, * Object {емкость = "128g", color = "black", network = "telecom"}, * object {емкость = "128g", color = "pink", network = "unicom"}, * obj Network = "Telecommunications"}]*/</script>Вышеуказанное содержание продукта, выпущенного картезианским продуктом на основе реализации JS, представленной вам. Я надеюсь, что это будет полезно для вас. В то же время я очень благодарен вам за вашу поддержку веб -сайта Wulin Network. Я верю, что мы будем добиваться большего успеха!