说我有一个n个元素的列表,我知道有n个!订购这些元素的可能方式.生成此列表的所有可能排序的算法是什么?例如,我有列表[a,b,c].该算法将返回[[a,b,c],[a,c,b,],[b,a,c],[b,c,a],[c,a,b],[c,b , 一个]].
我在这里阅读 http://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations
但维基百科从未擅长解释.我不太了解它.
在java时你这样做
a % b
Run Code Online (Sandbox Code Playgroud)
如果a是负数,它将返回负结果,而不是像它应该那样回绕到b.解决这个问题的最佳方法是什么?我能想到的唯一方法就是
a < 0 ? b + a : a % b
Run Code Online (Sandbox Code Playgroud) 它时不时地发生.某些库依赖于另一个库,并且用户打开属于错误仓库的问题.我可以将问题转移到其他回购中吗?
你可以说这个问题可以看作是两个回购问题,因为一个人依赖于另一个,只要一个人不能正常工作,两者都不会.但我宁愿谈论它所属的回购中的问题的解决方案.
我需要知道用户当前是否正在Google Chrome中查看标签.我试图将事件模糊和焦点绑定到窗口,但只有模糊似乎正常工作.
window.addEventListener('focus', function() {
document.title = 'focused';
});
window.addEventListener('blur', function() {
document.title = 'not focused';
});
Run Code Online (Sandbox Code Playgroud)
焦点事件很奇怪,只是有时候.如果我切换到另一个选项卡并返回,焦点事件将不会激活.但是,如果我点击地址栏然后返回页面,它就会.或者,如果我切换到另一个程序然后返回到Chrome,则会激活该选项卡当前是否已关注.
它给了我错误"之前坏线断线",因为我有如下代码
var one = 1
, two = 2
, three = 3
;
Run Code Online (Sandbox Code Playgroud)
如果我把它,放在行的末尾而不是下一行的开头,它就不会抱怨.但我想以这种方式编码.有没有办法让它不显示这个警告?
我查看了JSHint的选项,但没有任何与此错误相关的内容.
如何查看某个对象是否已加载,如果没有加载,如何加载,如下所示?
if (!isObjectLoaded(someVar)) {
someVar= loadObject();
}
Run Code Online (Sandbox Code Playgroud) 我正试着做些喜欢的事情
o = {
a: { foo: 42 },
b: o.a
}
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个错误,表示o未定义.我知道我以后可以做ob = oa但是我想知道在我定义o时是否可以定义b.
我通过复制到外部硬盘将一堆我的git存储库移动到另一个操作系统.现在,当我这样做时git diff,报告所有文件模式都已更改.
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/.npmignore b/.npmignore
old mode 100644
new mode 100755
diff --git a/.travis.yml b/.travis.yml
old mode 100644
new mode 100755
diff --git a/LICENSE b/LICENSE
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
Run Code Online (Sandbox Code Playgroud)
我对文件权限知之甚少,我该怎么办呢?
提交模式更改?为所有非可执行文件更改模式?git重置?
我有以下Javascript代码
add_num = {
f: function(html, num) {
alert(this.page);
},
page : function() {
return parseInt(this.gup('page'));
},
gup : function(name) {
name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
var regex = new RegExp('[\\?&]'+name+'=([^&#]*)');
var results = regex.exec(window.location.href);
if(results == null)
return '';
else
return results[1];
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用add_num.f()时,我从alert()获得的是实际的页面代码.也就是说,它返回
function() {
return parseInt(this.gup('page'));
}
Run Code Online (Sandbox Code Playgroud)
我期待一个数值而不是任何代码.
我正在尝试将元素添加到延迟评估的数组中.这意味着在访问它们之前,不会计算或知道它们的值.这就像我之前提出的问题,但对象是对象.
我最终为对象做的是
Object.prototype.lazy = function(var_name, value_function) {
this.__defineGetter__(var_name, function() {
var saved_value = value_function();
this.__defineGetter__(var_name, function() {
return saved_value;
});
return saved_value;
});
}
lazy('exampleField', function() {
// the code that returns the value I want
});
Run Code Online (Sandbox Code Playgroud)
但我还没有找到一种方法来为真正的数组做这件事.数组没有这样的setter.您可以将函数推送到数组,但是您必须将其作为函数调用它来返回您真正想要的对象.我现在正在做的是创建了一个我将其视为数组的对象.
Object.prototype.lazy_push = function(value_function) {
if(!this.length)
this.length = 0;
this.lazy(this.length++, value_function);
}
Run Code Online (Sandbox Code Playgroud)
所以我想知道的是,还有一种方法可以在数组上执行此操作而不是假数组吗?
更新:以下函数仅在value_function返回基本数据类型时有效.
Array.prototype.lazy_push = function(value_function) {
var a = this,
i = this.length;
this.push({
toString: function() {
return a[i] = value_function();
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试推送一个包含属性的对象,则在直接访问该对象之前,您将无法访问这些属性.这不会发生在setter中,这就是为什么我想要一些Javascript的设置语法.现在我将使用假阵列,这对我正在做的事情已经足够了.