Сжатие Массива Параметров Javascript

#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))