Как мне умножить каждое число в массиве из позиции tabProsent [I] слева?

#javascript

#javascript

Вопрос:

Как мне умножить каждое число в массиве из позиции tabProsent[I] слева? У меня не получается писать tabProsent[i].reduceRight(getSum) .

 function getSum(total, num) {
  return total * num;
}

// Update the current slider year (each time you drag the slider handle)
slider.oninput = function() {
  output.innerHTML = this.value;
  var i;
  for (i = 0; i < tabAar.length; i  ) { 
    if (slider.value == tabAar[i]) {
      output2.innerHTML=Math.round(startVerdi * tabProsent[i].reduceRight(getSum));
    }
  }
}
  

Комментарии:

1. Если у вас есть массив [0,1,2,3,4,5,6] и ваш tabProsent [I] равен 3, то ваш результат должен быть [0,1,2,6,12,20,30]. Это правильно?

2. неясно, каково значение tabProsent

3. если у меня есть array = [1,2,3,4,5], я хочу умножить каждое число из массива, например, из array [3] на левую вкладку [0]. и результат будет следующим 4*3*2*1=24 @ Саша

Ответ №1:

Это возможное решение. Примечание: я не знаю, каким должен быть результат, если индекс отрицательный, на самом деле тогда вы получаете результат 1. Если индекс больше длины массива, я уменьшаю pos до длины массива.

 function getMult(arr, pos) {
  if (pos>=arr.length)
      pos = arr.length-1;
  let res =1;
  for (let i=0; i<= pos; i  ) {
      res *= arr[i];
  }
  return res;
}

console.log(getMult([1,2,3,4,5], 3));  

Ответ №2:

Функциональный подход мог бы выглядеть следующим образом:

 let multToLeft = (arr, num, m) => {
  
  if (num < 0 || num > arr.length) throw new Error(`Invalid num ${num}`);
  return [ ...arr.slice(0, num).map(v => v * m), ...arr.slice(num) ];
  
};

let examples = [
  [ [ 1, 2, 3, 4, 5 ], 2, 10 ],
  [ [ 1, 2, 3, 4, 5 ], 3, 20 ],
  [ [ 1, 2, 3, 4, 5 ], 5, 11 ]
];

for (let [ arr, num, m ] of examples) {
  console.log(`multToLeft(${JSON.stringify(arr)}, ${num}, ${m}) -> ${JSON.stringify(multToLeft(arr, num, m))}`);
}  

Обратите внимание, что я работаю с num вместо index . Я выбрал, num чтобы указать фактическое количество элементов слева от массива, которые умножаются. Это имеет больше смысла, чем работа с index , поскольку применение умножения к нулевым элементам в массиве становится запутанным (поскольку предоставление 0 все равно означало бы применение умножения к первому элементу массива).