我想这是第一个问题。如果需要更多信息,请告诉我,以便你们帮助我。
所以我试着用javascript实现一个使用递归函数的算法。
该函数是从JavaScript中实现置换堆算法复制的,如下所示:
let swap = function(array, index1, index2) {
let temp = array[index1]
array[index1] = array[index2]
array[index2] = temp
return array
}
let permutationHeap = (array, result, n) => {
n = n || array.length // set n default to array.length
if (n === 1) {
result(array)
} else {
for (let i = 1; i <= n; i++) {
permutationHeap(array, result, n - 1)
if (n % 2) {
swap(array, 0, n - 1) // when length is odd so n % 2 is 1, select the first number, then the second number, then the third number. . . to be swapped with the last number
} else {
swap(array, i - 1, n - 1) // when length is even so n % 2 is 0, always select the first number with the last number
}
}
}
}
let output = function(input) {
console.log(output)
}
permutationHeap([1,2,3,4,5], output)
输出函数(回调?)中的console.log给了我正确的输出。如果我将console.log移动到置换堆函数中的if语句下方,我也会得到正确的输出(console.log(数组),在这种情况下)。
我想做的是将每个输出存储为一个数组,在一个数组中,我以后可以使用它。我猜我正在努力学习Javascript 101。处理异步思维。但我一辈子都搞不懂如何得到数组!
有人愿意为一个可能超级无聊的问题发光吗?:)非常感谢!
我想我已经通过使用生成器和yield成功修复了你的代码。虽然我不能确切地解释它...
js prettyprint-override">var swap = function(array, index1, index2) {
let temp = array[index1]
array[index1] = array[index2]
array[index2] = temp
return array
}
var permutationHeap = function*(array, result, n) {
n = n || array.length // set n default to array.length
if (n === 1) {
yield (array.slice(0))
} else {
for (let i = 1; i <= n; i++) {
yield* permutationHeap(array, result, n - 1)
if (n % 2) {
swap(array, 0, n - 1) // when length is odd so n % 2 is 1, select the first number, then the second number, then the third number. . . to be swapped with the last number
} else {
swap(array, i - 1, n - 1) // when length is even so n % 2 is 0, always select the first number with the last number
}
}
}
}
var x = permutationHeap([1,2,3,4,5])
var results = Array.from(x);
console.log(results);
实际上,我在之前的答案中打破了算法,因为通过重复数组不断迭代,我打破了算法中依赖数组随时间变化的部分。
我已经做出了一个答案,它使用您最初更有效地使用的代码:
var swap = function(array, index1, index2) {
var temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
return array;
};
var permutationHeap = function(array, result, n) {
n = n || array.length; // set n default to array.length
if (n === 1) {
result(array);
} else {
for (var i = 1; i <= n; i++) {
permutationHeap(array, result, n - 1);
if (n % 2) {
swap(array, 0, n - 1); // when length is odd so n % 2 is 1, select the first number, then the second number, then the third number. . . to be swapped with the last number
} else {
swap(array, i - 1, n - 1); // when length is even so n % 2 is 0, always select the first number with the last number
}
}
}
};
function getPermutations(array) {
var results = [];
var output = function(res) {
results.push(res.slice(0));
}
permutationHeap(array, output);
return results;
}
var permutations = getPermutations([1,2,3]);
console.log(permutations);
我建立了一个连接到两个集合并将其存储在两个数组中,但我无法访问它,因为它是异步的。 此外,我还想执行类似于从学生中选择滚动的操作 db.student.find({},{roll:1,_id:0}); 但实现这一点并不奏效,它只是从集合中获取所有内容。 我试过使用Async/Await,但它不起作用。 我尝试实现async(npm模块),并使用async.Series方法,但没有成功。 对cons
这是我的主要方法,我正在努力重新学习编码,因为我在学校里多次失败。我想从主方法中获取一个数组,并从循环中获取用户输入,然后将其传递给“TestScoresTwo.java”类中的构造函数。然后我想取那个数组,用它来求和,在类中的一个方法中找到平均值,然后返回和。 这是我的测试分数。java类。 当它编译时,我的输出是:“请输入等级数量有”3“输入等级11”等级是11.0“50”等级是50.0“70
问题内容: 即使在不同的浏览器中,此代码也始终有效: 但是,我找不到关于为什么它应该起作用的单一参考。我首先在John Resig的演示文稿中看到了这一点,但仅被提及。那里或任何地方都没有解释。 有人可以启发我吗? 问题答案: 该声明是魔术,使它的标识符在代码块*中的任何内容执行之前就被绑定了。 这与带有表达式的赋值不同,后者以正常的自上而下的顺序求值。 如果将示例更改为说: 它将停止工作。 函数
如何创建一个函数,该函数将整数数组和数组长度作为参数,如果数组元素的和为偶数,则返回true,否则返回false? 如何在不使用任何静态变量的情况下执行此操作? 我尝试过制作一个代码来检查当前是否为奇数,而前一个是偶数将递归返回 false,否则将递归返回 true,这个想法是基于数学公理,即只有偶数加奇数等于奇数,其他所有组合都是偶数。
然后我尝试了这种方法:1)为H2控制台部署一个预构建的WAR文件:https://www.cs.hs-rm.de/~knauf/javaee6/kuchen/h2console.war) 2)打开URL http://localhost:8080/h2console/h2 3)用户名/密码=“sa”登录 看看greeter应用程序添加的数据。运行以下SQL命令: 我试过了,但得到的信息 找不到表“
我更新一些值作为一个javascript内我的在像下面这样。 这是更新之前的对象 这就是我要更新它的方式, 因此,这给了我一个错误,state.lastValue.push不是一个函数。但如果我像下面这样做就好了, 这很好。什么原因。