#javascript #jquery #reduce
#язык JavaScript #jquery #уменьшить
Вопрос:
Я унаследовал веб-сайт и пытаюсь сжать какой-то плохо написанный сценарий. Один конкретный раздел обновляет параметры в поле выбора на основе других выбранных параметров. Он принимает числовые значения из двух других полей выбора, чтобы обновить количество возможных опций в третьем поле.
Вот код, о котором идет речь:
var value = parseInt(first_value) parseInt(second_value); if(value == 1){ var newOptions = {"0": "0", "1": "1",}; } else if(value == 2){ var newOptions = {"0": "0", "1": "1", "2": "2",}; } else if(value == 3){ var newOptions = {"0": "0", "1": "1", "2": "2", "3": "3",}; } else if(value == 4){ var newOptions = {"0": "0", "1": "1", "2": "2", "3": "3", "4": "4",}; } else if(value == 5){ var newOptions = {"0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5",}; }
Так продолжается вплоть до значения == 30, так что в итоге получается много кода, и я убежден, что есть способ уменьшить его.
Я сам пробовал несколько решений, которые полностью провалились, поэтому решил обратиться к сообществу, чтобы узнать, есть ли у кого-нибудь какие-либо идеи?
Комментарии:
1. Похоже, что цикл от первого до второго и сгребание их в объект в виде строковых ключей/val было бы самым простым подходом, хотя есть и другие. Любопытно, что не сработало с тем, что вы пробовали.
Ответ №1:
Вот быстрый и простой способ. Установив итератор x
равным -1, мы можем использовать x
его в while
цикле. Явное Number
приведение ( val
), вероятно, излишне, но удобно, если значение для val
исходит из ввода или другого HTML-элемента
const getOptions = val =gt; { let base = {}, x = -1; while ( x lt;= val) base[x] = x.toString(); return base } newOptions = getOptions(5); console.log(newOptions)
Ответ №2:
Что-то вроде этого?
const foo =(value) =gt; { let newOptions={0:'0'} for (let i = 1; i lt; value 1; i ) newOptions[i]=i.toString() return newOptions } console.log(foo(30))