2016-05-06 53 views
-1

我试图检查数组中的数字是否可以添加到数组中的特定数字(在这种情况下数组最大的数字是目标)。我的思考过程是创建一个包含所有可能组合的数组,然后遍历它以查看是否有最大数目。将值从for循环(在另一个for循环内)推到一个数组中JavaScript

为了得到所有组合的数组(addArray函数),我创建了一个数组results = [0],并且试图遍历被测数组中的每个值,例如array1,并将每个值添加到结果并将这些结果推向结果。因此,以array1为例:

results = [0] and array1 [0] = 5;结果= 0,5;

results = [0,5] and array1 [1] = 7; 0 + 7和5 + 7被推到结果,所以结果= [0,5,7,12];

为了实现这一点,我创建了一个用于循环通过阵列进行迭代被测试,然后内的for循环我创建另一个用于环路直通的结果阵列进行迭代,然后推动的总和数组中的项目将与结果中的所有项目一起进行测试,以便当循环移动到原始数组的下一个项目中,当它进入第二个for循环时,结果数组包含前面项目的总和,如上面的例子。

但是,我似乎无法得到它的工作,但如果我在结果中放入一些值,我可以看到每个项目都在迭代结果中的每个值。我的问题似乎是将项目推送到原始数组中的下一个项目的结果。我的感觉是,你不能将项目推送到你正在迭代的数组?任何帮助将不胜感激。

感谢

var array1 = [5, 7, 16, 1, 2]; 
var array2 = [3, 5, -1, 8, 16]; 
var array3 = [4, 6, 23, 10, 1, 3]; 

var arraySort = function(arr) { 
    arr = arr.sort(function(a, b) { 
     return a - b; 
    }); 
    return arr; 
}; 

var addArray = function(arr) { 
    arr = arraySort(arr); 
    var largest = arr[arr.length - 1]; 
    var results = [0]; 
    //Here's where I am stuck. 
    for (var i = 0; i < arr.length - 1; i++) { 
     for (var j = 0; j < results.length; j++) { 
      results.push(arr[i] + results[j]); 
     } 
    } 
}; 
addArray(array1); 
+0

使用一个空的临时结果数组并在迭代后将其分配给结果。 –

+0

用你写的'for'循环(长度测试在中间字段中),当你迭代时,你可以推入相同的数组。你的问题很可能只是使用错误的算法。 – Alnitak

回答

0

试试这个,

var addArray = function(myarr) { 
 
    var arr = myarr.slice(0).sort((a,b)=>a-b); 
 
    var new_results = []; 
 
    var results = [0,5]; 
 
    //Here's where I am stuck. 
 
    for (var i = 0; i < arr.length; i++) { 
 
     for (var j = 0; j < results.length; j++) { 
 
      new_results.push(arr[i] + results[j]); 
 
     } 
 
    } 
 
    return new_results; 
 
}; 
 

 
console.log(addArray([0,1,2]).sort());

你被追加到result阵列这是无限的for循环增加。使用不同的数组来存储结果,并且理想情况下始终对作为参数传递的数组进行切片。