小编Ren*_*soo的帖子

使用JavaScript Array.sort()方法进行混洗是否正确?

我用他的JavaScript代码帮助了一个人,我的眼睛被一个看起来像这样的部分抓住了:

function randOrd(){
  return (Math.round(Math.random())-0.5);
}
coords.sort(randOrd);
alert(coords);
Run Code Online (Sandbox Code Playgroud)

我的第一个是:嘿,这不可能奏效!但后来我做了一些实验,发现它确实至少似乎提供了很好的随机结果.

然后我做了一些网络搜索,几乎在顶部发现了一篇文章,这段代码最简单地被复制.看起来像一个相当可敬的网站和作者......

但我的直觉告诉我,这一定是错的.特别是因为ECMA标准没有规定排序算法.我认为不同的排序算法会导致不同的非均匀混洗.一些排序算法甚至可能无限循环...

但你怎么看?

而另一个问题是......现在我将如何衡量这种改组技术的结果是多么随机?

更新:我做了一些测量并将结果发布在下面作为答案之一.

javascript sorting random shuffle

124
推荐指数
6
解决办法
5万
查看次数

如何计算距离另一个点一定距离的点的latlng?

要在地图上绘制圆,我有一个中心GLatLng(A)和一个以米为单位的半径(r).

这是一个图表:

           -----------
        --/           \--
      -/                 \-
     /                     \
    /                       \
   /                   r     \
   |            *-------------*
   \             A           / B
    \                       /
     \                     /
      -\                 /-
        --\           /--
           -----------
Run Code Online (Sandbox Code Playgroud)

如何计算位置B的GLatLng?假设r与赤道平行.

使用GLatLng.distanceFrom()方法获得A和B时的半径是微不足道的 - 但是反过来却不是这样.似乎我需要做一些更重的数学.

javascript google-maps

47
推荐指数
2
解决办法
4万
查看次数

有没有办法自定义git blame的输出?

git log有一个很好的--format选项来指定如何格式化输出.

git blame似乎没有相应的,虽然默认输出blame不是很人性化.我希望看到更少.

例如,而不是:

5600cab7 js/sidebar/VehicleGrid.js        (Rene Saarsoo    2009-10-08 18:55:24 +0000 127)    if (x > y) {
b5f1040c js/map/monitoring/VehicleGrid.js (Mihkel Muhkel   2010-05-31 07:20:13 +0000 128)        return x;
Run Code Online (Sandbox Code Playgroud)

我想拥有:

5600cab7 Rene Saarsoo (1 year ago)     127:    if (x > y) {
b5f1040c Mihkel Muhkel (5 months ago)  128:        return x;
Run Code Online (Sandbox Code Playgroud)

我认为我可以编写一个脚本来解析输出,git blame --porcelain但是考虑到可怕的默认输出,blame我觉得有人在那里已经做了一些事情.

有任何想法吗?或者实现这样一个脚本的任何提示?

编辑:通过编写小脚本解决它.

git blame

47
推荐指数
4
解决办法
1万
查看次数

版本控制下的Gettext .po文件

目前在项目上使用Gettext,.po文件很好地保存在版本控制之下.

PO文件当然包含翻译,但除此之外,它们还包含一些元数据 - 有关可翻译字符串所在的确切文件和行号的信息.

问题是每次更新PO文件时,元数据的变化比实际的翻译要多得多.这使得以后很难从版本控制差异中看到实际更改的内容 - 您只看到文件名和行号的无数更改.像那样:

- #: somefile.js:43
- #: somefile.js:45
- #: somefile.js:118
+ #: somefile.js:203
+ #: somefile.js:215
  msgid "Translate me please"
  msgstr "Tõlgi mind palun"

- #: somefile.js:23
- #: somefile.js:135
+ #: otherfile.js:23
+ #: otherfile.js:135
  msgid "Note"
  msgstr "Märkus"

- #: andThatFile.js:18
  #: orThisFile.js:131
- msgid "Before I was like this"
- msgstr "Selline olin ma enne"
+ msgid "I happen to be changed"
+ msgstr "Paistab, et mind muudeti"
Run Code Online (Sandbox Code Playgroud)

当然,一个简单的解决方法是在xgettext输出中禁用filename/linenumber注释的生成.但实际上我发现这些文件名在翻译时非常有用.

我当然不可能是唯一一个不喜欢他的PO文件的差异的人.建议?

git version-control diff gettext po-file

35
推荐指数
4
解决办法
4001
查看次数

在ExtJS中调用超类方法的更好方法

我读过的所有ExtJS文档和示例都建议调用这样的超类方法:

MyApp.MyPanel = Ext.extend(Ext.Panel, {
  initComponent: function() {
    // do something MyPanel specific here...
    MyApp.MyPanel.superclass.initComponent.call(this);
  }
});
Run Code Online (Sandbox Code Playgroud)

我已经使用这种模式很长一段时间了,主要的问题是,当你重命名你的类时,你还必须改变所有对超类方法的调用.这很不方便,经常我会忘记,然后我必须追查奇怪的错误.

但是看完来源Ext.extend(),我发现,这不是我可以使用superclass()super()该方法Ext.extend()增加了原形:

MyApp.MyPanel = Ext.extend(Ext.Panel, {
  initComponent: function() {
    // do something MyPanel specific here...
    this.superclass().initComponent.call(this);
  }
});
Run Code Online (Sandbox Code Playgroud)

在这个代码中,将MyPanel重命名为其他东西很简单 - 我只需更改一行.

但我怀疑......

  • 我没有在任何地方看到过这种情况,旧的智慧说,我不应该依赖于无证件的行为.

  • 我没有在ExtJS源代码中找到这些superclass()supr()方法的单独使用.为什么在你不打算使用它们时创建它们?

  • 也许这些方法在某些旧版本的ExtJS中使用但现在已被弃用?但它似乎是一个非常有用的功能,你为什么要弃用呢?

那么,我应该使用这些方法吗?

javascript extjs extend superclass extjs3

29
推荐指数
3
解决办法
4万
查看次数

动态语言中的接口有什么意义吗?

在像Java这样的静态语言中,你需要接口,否则类型系统就不会让你做某些事情.但是在PHP和Python这样的动态语言中,你只需要利用duck-typing.

PHP支持接口.Ruby和Python没有它们.所以你可以在没有他们的情况下幸福地生活.

我一直在用PHP工作,并且从未真正使用定义接口的能力.当我需要一组类来实现某些通用接口时,我只是在文档中描述它.

所以你怎么看?如果不使用动态语言中的接口,你最好不是最好的吗?

php dynamic-languages duck-typing interface

25
推荐指数
4
解决办法
3629
查看次数

ExtJS ComboBox触发器动作:"全部"真的有用吗?

我试图创建一个简单的ComboBox:

var combo1 = new Ext.form.ComboBox({
  store: [1,2,3],
  renderTo: document.body
});
Run Code Online (Sandbox Code Playgroud)

但是以这种方式编写它的行为很奇怪:

  • 当您第一次弹出下拉菜单时,它提供了三种选择.
  • 你选择一个.
  • 但是当您尝试更改选择后,下拉菜单只提供一个选项 - 您之前选择的选项.

我将我的代码与Ext主页上的示例进行了比较,发现添加triggerAction: "all"解决了我的问题:

var combo2 = new Ext.form.ComboBox({
  triggerAction: "all",
  store: [1,2,3],
  renderTo: document.body
});
Run Code Online (Sandbox Code Playgroud)

ExtJS文档triggerAction并没有告诉我很多:

单击触发器时要执行的操作.使用'all'运行allQuery配置选项指定的查询(默认为'query')

我没有指定allQuery选项.实际上,我根本不想对服务器执行查询.

triggerAction真的是什么呢?

"all"当我只想要一个简单的静态组合框时,它是否真的应该做到这一点?

javascript combobox extjs

22
推荐指数
1
解决办法
2万
查看次数

什么是deckware?

我在这篇博文中偶然发现了这个词.

黑客新闻中也有类似的问题,但没有明确的答案.

谷歌似乎也没有多大帮助.

semantics

13
推荐指数
2
解决办法
1682
查看次数

如何根据严重性更改数据网格中的行颜色?

如何根据严重性条件更改数据网格中的行颜色?我是这个EXTJS主题的​​新手.我曾经读过阅读,存储到存储和编写器来编写数据.将所有数据提取到网格后,如何根据严重性条件更改数据网格中的行颜色?你可以用代码工作来解释我吗?

gridview extjs gridpanel

10
推荐指数
2
解决办法
3万
查看次数

TypeScript 中缺少 AbortController

我正在尝试在 TypeScript 中使用AbortController

给定这个小文件:

const controller = new AbortController();
Run Code Online (Sandbox Code Playgroud)

我从 TypeScript 编译器收到以下错误:

src/testAbort.ts:1:24 - error TS2304: Cannot find name 'AbortController'.

1 const controller = new AbortController();
                         ~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

TypeScript 有关于AbortController 的文档。我还从 Github 发现了一个问题,该问题已通过合并包含 AbortController 类型定义的拉取请求得到解决。所以它应该是可用的。

我的tsconfig.json包含:

src/testAbort.ts:1:24 - error TS2304: Cannot find name 'AbortController'.

1 const controller = new AbortController();
                         ~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  • 升级到最新的 TypeScript 3.7.5
  • 将tsconfig 中的lib和选项设置为.target"ESNext"
  • 通过访问它global.AbortController

typescript fetch-api abortcontroller

10
推荐指数
1
解决办法
9046
查看次数