迭代两个变量的所有排列
iterate through all permutations of two variables
对于值为1和-1的x
和y
变量的所有排列,我需要调用以下函数cross
4次;
我的方法:
var p = [-1, 1];
p.forEach(function(x) {
p.forEach(function(y) {
cross(x, y);
});
});
有更短的方法吗?
如果您想要额外的功能,您可以将map
和reduce
数组合并为一个。我不认为它一定会比你现在的更有效率,也不会更简单(它更实用,只是稍微)。
var d = [-1, 1];
var r = d.reduce(function(p, x) {
return p.concat(d.map(function(y) {
return cross(x, y);
}));
}, []);
document.getElementById('r').textContent = JSON.stringify(r);
<pre id=r></pre>
我真的不认为有比n^2效率更好的算法产生n^2组合
既然知道数组的长度,就不需要循环了。最快的解决方案是:
var p = [-1, 1];
cross(p[0], p[0]);
cross(p[0], p[1]);
cross(p[1], p[0]);
cross(p[1], p[1]);
调用函数有一些开销。例如,将返回指针放在堆栈上。使用两个for循环可能比回调forEach要稍微快一些。
var p = [-1, 1];
for (var x = 0; x < p.length; x++) {
for (var y = 0; y < p.length; y++) {
cross(p[x], p[y]);
}
}
这样会更快:
for (var n = 0; n < 4; ++n)
cross(n & 2 ? 1:-1, n & 1 ? -1:1);
但是它更短吗?
相关文章:
- 将函数的上下文应用于javascript变量
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- 将PHP变量传递给jQuery时遇到问题
- 如何通过ajax刷新JSF填充的javascript变量
- 参数变量出现ngTable指令问题
- 通过javascript重定向html传递php变量
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 全局变量和全局对象的属性之间有什么区别吗
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 值对象在某个变量发生更改后发生更改
- 如何删除多行HTML排列中的空白
- Javascript变量赋值|
- AngularJS-在JSON选择器中使用变量名
- Javascript计数器变量未显示正确的值
- delete关键字在全局变量上的不同行为
- 如何在php变量中嵌入JQuery代码
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在javascript函数中设置全局变量
- 迭代两个变量的所有排列