该函数返回无效值

时间:2021-01-28 19:02:42

标签: javascript

实现 getarrayproduct 函数,该函数获取一个数字数组并返回一个相同大小的数组,其中 numbers[I] 等于该元素右侧和左侧的数组中所有元素的乘积。

>

注意事项:

初始数组至少包含 2 个元素 数组只包含正数 数字可以重复 示例:

getArrayProduct([1,5,2]) === [10,2,5]

第一个元素 10 是除第一个元素 1 之外的所有数组元素的乘积 第二个元素 2 是除第二个元素 5 之外的所有数组元素的乘积 第三个元素 5 是除第三个元素 2 之外的所有数组元素的乘积

 getArrayProduct([12,20]) === [20,12]

数组20的第一个元素是除第一个元素外的所有数组元素的乘积 第二个元素12是除第二个元素外的所有数组元素的乘积

我的代码

function getArrayProduct(numbers) {

  let arr = []
  let a = 0;
  let l = numbers.length;

  if (numbers.length == 2) {
    arr = numbers.reverse()
    return arr
  }

  while(true) {
    if (a + 1 !== NaN) {
      if ((a + 1) == numbers.length) {
        arr[a] = numbers[a] * numbers[0]
      } else {
        arr[a] = numbers[a] * numbers[a+1]
      }
    }

    if (a > numbers.length - 2) {
      break;
    }

    a++;
    l--;
  }

  return arr
}

函数“getArrayProduct”应该返回正确的数组:

[4, 5, 2, 19, 8, 80]

预期:

"[121600,97280,243200,25600,60800,6080]"

收到:

"[20,10,38,152,640,320]"

和 getArrayProduct([1,5,2]) === [10,2,5] - (预期)和我的结果 [5,10,2]

1 个答案:

答案 0 :(得分:1)

替代方法: 例如:[1,5,2] 一次将数组中的所有数字相乘。你会得到 ans 1x5x2 = 10

现在你的输出数组将是 [product/1, product/5, product/2] == [10/1,10/5,10/2] == [10,2,5]

此方法将消除为数组中的每个索引一次又一次地乘以相同数字的工作。

function getArrayProduct(numbers) {

  let arr = []
  let product = 1, i=0;

for (i=0;i<numbers.length;i++){
    product=product*numbers[i];
}

for(i=0;i<numbers.length;i++)
{ 
    arr[i] = product/numbers[i];
}

return arr;
}