Javascript(ECMAscript)Array.prototype.forEach从版本1.6(ECMAscript edition 3,2005)开始支持该方法.因此,相当多的浏览器已经支持该方法,并且与jQuery的$.each()方法相比,它的速度非常快.
(实际上它胜过所有实现,无论哪个Javascript库)
与jQuery相比,它的速度提高了约60-70%.在JSPerf 上使用forEach和jQuery自己尝试一下.
到目前为止我唯一使用它的缺点是,我无法想象早点打破迭代的方法.喜欢for,while并且do-while有一个break声明,jQuerys .each()支持return false打破循环.
我查看了ECMAScript第5版规范(我发现的最新版本),但他们没有提到从该循环中提前中断.
所以,问题,Douglas Crockford先生会称之为design error?
我错过了什么,有可能提前打破这样的循环吗?
编辑
谢谢你到目前为止的答案.我想既然没有人想出一个"原生"解决方案,那真的没有实现(可能是一个功能?).无论如何,我真的不喜欢建议的方法,所以我愚弄了一点,终于找到了一个我喜欢的(至少,更好).好像:
var div = document.createElement('div'),
divStyle = div.style,
support = jQuery.support,
arr = ['MozTransform', 'WebkitTransform', 'OTransform'];
arr.slice(0).forEach(function(v,i,a){
if(divStyle[v] === ''){
support.transform = v;
a.length = 0;
}
});
Run Code Online (Sandbox Code Playgroud)
这是"真正的"生产代码.我找了一个查找css3转换属性的好方法,我迷失了ecma5规范和奇怪的Javascript论坛:-)
因此,您可以将数组对象本身作为第三个参数传递给.forEach回调.我从原始数组创建一个副本,一旦找到我正在寻找的东西,就调用slice(0)并将其.length属性设置为0.效果很好.
如果有人提出了更好的解决方案,我当然会编辑它.
我正在开发一个移动Web应用程序,我有一个主屏幕,上面有许多图标,所以我尝试使用精灵一次性服务所有图像.
然而,我注意到iphone4在我的精灵中很好地缩放了图像(它们看起来有点抖动),但在我的HTC Evo上,精灵渲染的图像看起来非常块状.我切换到标准图像(背景:(/ image_url /)没有背景位置),图像看起来好多了 - 看到这个
,左图像是使用单个图像提供的,而右边的图像是从精灵提供的(但是在精灵中是相同的图像).
有没有办法让Android浏览器更好地解释精灵?
如果您执行的连接看起来像这样
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
Run Code Online (Sandbox Code Playgroud)
有没有办法不允许NULLS匹配类似于此查询将返回的结果
SELECT T1.KeyField1, T1.KeyField2, T2.Field3
FROM T1 JOIN T2 ON T1.KeyField1 = T2.KeyField1 AND T1.KeyField2 = T2.KeyField2
AND T1.KeyField2 IS NOT NULL AND T2.KeyField2 IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
编辑
我实际上问了这个问题......让我再试一次.
我们正在将新数据与旧数据进行比较,并查找行完全相同的记录.
所以两个表都定义了:
CREATE TABLE [Table](
[Identifier] [int] IDENTITY(1,1) NOT NULL,
[Key1] [varchar](50) NOT NULL,
[Data1] [varchar](50) NULL,
[Data2] [varchar](50) NULL
Run Code Online (Sandbox Code Playgroud)
如果我查询:
DELETE
FROM T1 JOIN T2 ON T1.Key1 = T2.Key1
AND T1.Data1 = T2.Data2 …Run Code Online (Sandbox Code Playgroud) 我能够编译包含这个的代码:
OperationDelegate myOpDelegate;
static OperatorDefinition[] definitions ={
new OperatorDefinition("+",2,3,true, new OperationDelegate(OperationAdd)),
};
delegate double OperationDelegate(double[] args);
static double OperationAdd(double[] args)
{
return args[0] + args[1];
}
Run Code Online (Sandbox Code Playgroud)
但我认为如果我可以做更像这样的事情,我的代码看起来会更清晰:
OperationDelegate myOpDelegate;
static OperatorDefinition[] definitions ={new OperatorDefinition("+",2,3,true, new OperationDelegate({return args[0]+args[1]}))};
delegate double OperationDelegate(double[] args);
Run Code Online (Sandbox Code Playgroud)
因为我想在一个地方定义每个OperatorDefinition的所有内容,而不是单独定义这些函数.有没有办法在C#中做到这一点?
(对我的代码的任何其他批评也是受欢迎的)
这个问题的主题不言而喻.我想知道Fluent NHibernate是否已准备好生产代码.我特别想知道我遇到的一些看似简单的问题,我还没有找到完全令人满意的解决方案(并且社区没有解决方案?)
为什么Fluent NHibernate会忽略我对组件的唯一约束?
是的,我知道这个的老问题是超过一岁; 答案似乎有点 - 有点 - 也许.
流利的NHibernate现在可以投入生产吗?
如果我的算法由主机到设备和设备的瓶颈来承载内存传输,那么唯一的解决方案是不同的还是修改过的算法?
我需要确定装饰器中函数的argspec(inspect.getargspec):
def decor(func):
@wraps(func)
def _decor(*args, **kwargs):
return func(*args, **kwargs)
return _decor
@decor
def my_func(key=1, value=False):
pass
Run Code Online (Sandbox Code Playgroud)
我需要能够检查包装的"my_func"并返回键/值参数及其默认值.看来inspect.getargspec没有得到正确的功能.
(对于一些运行时检查/验证以及后来的文档生成,我需要这个)
平台:Linux,OSX
编译器:GCC
我有一个简单的程序,目前让我感到困惑 - 我知道我正在搞乱几种不同类型的数组/指针来产生这个问题 - 它是故意的 - 我试图理解它.
列出的代码将按预期编译和运行,但会data4在调用中strsep(&data4, "e");更改data1或data3导致分段错误.我想了解原因.
#include <stdio.h>
#include <string.h>
int main(int c, char** v) {
char* data1 = "hello\0";
char* data2 = strdup(data1);
size_t sz = strlen(data1);
char data3[sz+1];
char* data4;
memset(data3, 0, sz+1);
data4 = strncpy(data3, data1, sz);
data4[sz] = '\0';
char* found = strsep(&data4, "e");
if (found == NULL) {
printf("nothing found\n");
} else {
printf("found e\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个A类,可以通过两种不同的方式生成.
第一种方法将文件路径作为输入从XML文件解析以获取listA和listB.第二种方法有两个列表.
我可以想到两种方法来实现多个构造函数.你怎么看?通常Python人员使用什么方法来处理这种情况?
class A():
def __init__(self, arg1, arg2 = None):
if isinstance(arg1, str):
...
elif isinstance(arg1, list):
...
a = A("abc")
b = A([1,2,3],[4,5,6])
Run Code Online (Sandbox Code Playgroud)
class A2():
def __init__(self):
pass
def genFromPath(self, path):
...
def genFromList(self, list1, list2):
...
a = A2()
a.genFromPath("abc")
b = A2()
b.genFromList([1,2,3],[4,5,6])
Run Code Online (Sandbox Code Playgroud) 这是一段可运行的代码,显示了我的"问题".
我有一个被JTextArea包裹的JScrollPane.当我更改文本时JTextArea,JScrollPane滚动会自动滚动到文本的末尾,我不希望这样.
这是我的要求:
(即使文本比水平方式更多,应用程序和用户都不应该能够水平滚动.垂直方向,只有用户才能滚动.)
我不知道如何"修复"这个问题:应该使用JTextArea或JScrollPane方法修复吗?
请注意,AFAICT根本不重复:JTextPane阻止在父JScrollPane中滚动
这是一个有趣的例子,它每隔200毫秒放入新文本JTextArea,你可以看到JScrollPane总是自动滚动到文本的末尾.
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public final class TextInScrollPane extends JFrame {
private static final Random r = new Random( 42 );
public static void main( final String[] args ) {
final JFrame f = new JFrame();
f.setDefaultCloseOperation( EXIT_ON_CLOSE ); …Run Code Online (Sandbox Code Playgroud) python ×2
android ×1
c ×1
c# ×1
constructor ×1
css-sprites ×1
cuda ×1
delegates ×1
ecma262 ×1
java ×1
javascript ×1
jquery ×1
jscrollpane ×1
jtextarea ×1
libc ×1
memory ×1
nvidia ×1
opencl ×1
sql ×1
sql-server ×1
string ×1
swing ×1
syntax ×1
t-sql ×1