如何显示在递归函数中添加了哪些变量
How to show what variables are being added in this recursive function
此函数接受一个数组:var data = [5,10,28,50,56,280];
,并检查是否可以将任何索引组合在一起以创建一个大于变量的数字:在本例中为30
。这个函数工作得很完美,但我想让它显示它为了得到结果而添加的索引。在这种情况下,33将显示28 + 5
。
var findLowest = function(ary, limit) {
if (limit < ary[0]) return ary[0];
// If there's a number in our ary that's higher than the limit,
// this is the initial benchmark
var bestCandidate = Infinity,
maxIndex = ary.findIndex(v => v > limit);
if (maxIndex !== -1) {
bestCandidate = ary[maxIndex] - limit;
ary = ary.slice(0, maxIndex);
}
// Calculate remainders, call this method recursively for all remainders
var diffs = ary.map(v => limit % v);
var finalDiffs = diffs.map(v => findLowest(ary, v) - v);
return limit + Math.min(bestCandidate, finalDiffs.sort()[0]);
};
var prepareData = function(ary) {
return ary
// Remove duplicates of nrs in array
.reduce((res, v) => {
var needed = !res.length || res.every(r => v % r);
return needed ? res.concat(v) : res;
}, [])
// Generate each combination (length * length - 1)
.reduce((res, v, i, all) => {
return res.concat(v).concat(all.slice(i + 1).map(v2 => v + v2));
}, [])
// Sort lowest first
.sort((a, b) => a - b);
}
var data = [5,10,28,50,56,280];
var testCases = [
[data, 30, 0], //<----30 is being tested against the array
];
testCases.forEach(tc => {
var prep = prepareData(tc[0]);
var result = findLowest(prep, tc[1]);
if (result !== tc[2]) {
document.write("Result: ", result);
}
});
根据您的逻辑,它所添加的索引将始终是切片数组的第一个和最后一个元素。
console.log(ary[0] + ',' + ary[finalDiffs.length -1])
在返回findLowest
之前
相关文章:
- 如何多次添加变量
- 如何在JS中的变量中添加变量
- 用javascript添加变量作为随机生成的结果编号
- Javascript 不从数据库向上添加变量
- 在 Java 脚本中向日期添加变量编号
- 在 AngularJS 中添加变量
- 姜戈;在自定义小部件中向媒体文件添加变量
- 使用下拉列表在嵌入式代码中添加变量
- JQuery 获取链接并根据第 n 个数字添加变量
- JavaScript源代码中添加变量的问题
- 在 JavaScript 中添加变量
- 为什么Google闭包编译器在原始命名空间为空的情况下向全局命名空间添加变量
- 如何添加变量's值转换为数组函数
- 如何在 javascript 中添加变量
- Node.js:如何在url中添加变量作为输入
- 关于在Javascript中添加变量的问题
- 基于IF语句添加变量无效
- 如何在模块上下文中添加变量-Node.js
- JavaScript:添加变量
- 从javascript向Magento会话添加变量