为什么forEach函数输出错误?

时间:2016-06-11 00:21:04

标签: javascript

#This returns an error
>>> print(instance.get_first())
 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
 TypeError: get_first() takes exactly 1 argument (0 given)

#This works perfectly fine
>>> print(instance.get_first(instance))
 1

ArrayAdditionI(arr)获取存储在arr中的数字数组并返回//字符串为true如果数组中的数字组合可以添加//最多等于数组中的最大数字,否则返回//字符串错误。例如:如果arr包含[4,6,23,10,1,3] //输出应返回true,因为4 + 6 + 10 + 3 = 23.数组//不会为空,不包含全部相同的元素,可能包含//负数。     //示例测试用例     //输入:5,7,16,1,2     //输出:&#34; false&#34;     //     //输入:3,5,-1,8,12     //输出:&#34; true&#34;

Challenge
Using the JavaScript language, have the function 

大家好!!! 这个ArrayAdditionI函数的输出应该是true,但由于某些未知的原因,它返回false。但是,我发现它是因为forEach函数,因为当我使用forLoop时,它工作正常。有谁知道为什么每当我使用forEach它给我错误的输出?为什么会这样?

2 个答案:

答案 0 :(得分:2)

添加:

var found = false; // <--- new
array.forEach(function(num,idx){

而且:

      if(sum === largest){
          found = true; // <--- new
      }

  });

  return found; // <--- new

正如@Hamms在评论中所说,return内的forEach只会在循环内返回,并且会返回外部函数ArrayAdditionI < / p>

JSFiddle:https://jsfiddle.net/f782dcps/

答案 1 :(得分:1)

  

我的目标是知道如果数组元素的任何总和等于数组中的最大数字。

您可以使用以下方式执行此操作:

function containsSumToMaximum( array ){
  array.sort( function(a,b){ return a < b ? -1 : 1; } );
  var max = array.pop();
  for ( var i = 3; i < 2 << array.length; i++ )
  {
    var sum   = 0,
        count = 0;
    for ( var j = 0; j < array.length; j++ )
    {
      if ( i & (2 << j) )
      {
        sum += array[j];
        count++;
      }
      if ( sum > max )
        break;
    }
    if ( sum == max && count > 1 )
      return true;
  }
  return false;
}

对于n元素数组,有2^n -1种方法可以将这些元素中的一个或多个相加。上面的算法只是对所有可能的总和进行强力搜索,并考虑每个总和是否为最大值,并且总和由两个或更多元素组成。