我正在尝试检查数组中的数字是否可以累加到数组中的特定数字(在这种情况下,数组最大数字是目标)。我的思考过程是创建一个包含所有可能组合的数组,然后迭代它以查看最大数字是否在那里。
为了得到所有组合的数组(addArray函数),我创建了一个数组,results = [0],并且我试图遍历被测数组中的每个值,例如array1,并将每个值添加到结果中并且随着我的进展将这些结果推送到结果中。因此,使用array1作为示例:
results = [0]和array1 [0] = 5; 0 + 5被推送到结果所以:results = [0,5];
results = [0,5] and array1 [1] = 7;将0 + 7和5 + 7推到结果,因此结果= [0,5,7,12];
等
为了实现这个目的,我创建了一个for循环来遍历被测试的数组,然后在for循环中我创建了另一个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)
试试这个,
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());
&#13;
您附加到result
数组,该数组在for循环中无限增加。使用不同的数组来存储结果,理想情况下,总是切片作为参数传递的数组。