Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 该函数返回无效值_Javascript - Fatal编程技术网

Javascript 该函数返回无效值

Javascript 该函数返回无效值,javascript,Javascript,实现getarrayproduct函数,该函数获取一个数字数组并返回一个大小相同的数组,其中数字[I]等于该元素左右两侧数组中所有元素的乘积 注: 初始数组至少包含2个元素 数组只包含正数 这些数字可以重复 示例: getArrayProduct([1,5,2]) === [10,2,5] 第一个元素10是除第一个元素1之外的所有数组元素的乘积 第二个元素2是除第二个元素5之外的所有数组元素的乘积 第三个元素5是除第三个元素2之外的所有数组元素的乘积 及 数组20中的第一个元素是除第一个元素之

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

注:

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

getArrayProduct([1,5,2]) === [10,2,5]
第一个元素10是除第一个元素1之外的所有数组元素的乘积 第二个元素2是除第二个元素5之外的所有数组元素的乘积 第三个元素5是除第三个元素2之外的所有数组元素的乘积

数组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,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;
}
函数getArrayProduct(数字){ 设arr=[] 设乘积=1,i=0;
对于(i=0;我要记住,
reverse()
通常你的方法看起来也很奇怪。为什么首先要无限循环?为什么不简单地计算一个乘积(1 reduce),然后将数组映射到
prod/item
(1 map)。你希望你的乘积超过最大安全整数吗?我的意思是
函数getArrayProduct(arr){const prod=arr.reduce((a,b)=>a*b)返回arr.map(item=>prod/item)}
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;
}