小编Dav*_*nan的帖子

为什么向后遍历数组的速度比向前快

鉴于此代码:

var arr = [];

for (var i = 0; i < 10000; ++i)
    arr.push(1);
Run Code Online (Sandbox Code Playgroud)

前锋

for (var i = 0; i < arr.length; ++i) {}
Run Code Online (Sandbox Code Playgroud)

向后

for (var i = arr.length - 1; i >= 0; --i) {}
Run Code Online (Sandbox Code Playgroud)

硬编码转发

for (var i = 0; i < 10000; ++i) {}
Run Code Online (Sandbox Code Playgroud)

为什么向后退得这么快?

这是测试:http: //jsperf.com/array-iteration-direction

javascript optimization performance

53
推荐指数
4
解决办法
5万
查看次数

如何在C++中确定对象的大小?

例如,假设我有一个类Temp:

class Temp
{
    public:
        int function1(int foo) { return 1; }
        void function2(int bar) { foobar = bar; }

    private:
        int foobar;
};
Run Code Online (Sandbox Code Playgroud)

当我创建Temp类的对象时,我如何计算它需要多少空间,以及它如何在内存中表示(例如| foobar | 4个字节| function1 | 8的8个字节|)

c++ memory size memory-management class

38
推荐指数
5
解决办法
8万
查看次数

VSCode 插入“不间断空格”而不是常规空格

我想弄清楚为什么 VSCode 有时会决定随机插入“不间断空格”U+00A0而不是常规空格,以及如何阻止这种情况发生?

这是导致问题的不同类型的空格字符,如我之前的问题GitHub markdown not rendering 和 git detection changes when no changes 中所见

这在 Mac OS 和 Windows 上都发生在我身上,其他人也遇到过这个问题。虽然这个问题是关于 VSCode 的,但这也发生在在线的 GitHub 降价编辑器上。

我该如何解决这个问题?

重现步骤

.md在 VSCode 中编辑一个 markdown文件一段时间。

放入许多标题,例如# my heading## my sub-heading

如果你有降价扩展,你可以CTRL/CMD + SHIFT + POpen preview to the side.

您最终应该会注意到其中一个标题没有呈现,如果您在十六进制编辑器(如 HxD)中打开文件,您会注意到#字符后面有一个不间断空格而不是常规空格。

可能的原因

  • `Windows 上的反引号字符可以与键盘上的字母组合,例如a导致à. 也许使用反引号会导致空格字符变成不间断空格?然而,这不能解释 Mac OS 上的问题,因为反引号不能与其他字符组合。

visual-studio-code

17
推荐指数
1
解决办法
3301
查看次数

JavaScript - 将上下文附加到异步函数调用?

同步函数调用上下文

在 JavaScript 中,通过在全局范围内使用堆栈,可以轻松地将某些上下文与同步函数调用相关联。

// Context management

let contextStack = [];
let context;

const withContext = (ctx, func) => {
  contextStack.push(ctx);
  context = ctx;

  try {
    return func();
  } finally {
    context = contextStack.pop();
  }
};

// Example

const foo = (message) => {
  console.log(message);
  console.log(context);
};

const bar = () => {
  withContext("calling from bar", () => foo("hello"));
};

bar();
Run Code Online (Sandbox Code Playgroud)

这允许我们编写特定于上下文的代码,而不必到处传递上下文对象,并且我们使用的每个函数都依赖于该上下文对象。

这在 JavaScript 中是可能的,因为保证了顺序代码执行,也就是说,这些同步函数在任何其他代码可以修改全局状态之前运行完成。

生成器函数调用上下文

我们可以使用生成器函数实现类似的功能。生成器函数使我们有机会在生成器函数的概念执行恢复之前进行控制。这意味着,即使执行暂停几秒钟(即,该函数在任何其他代码运行之前都没有运行完成),我们仍然可以确保其执行附加了准确的上下文。

const iterWithContext = function* (ctx, generator) {
  // not a perfect implementation

  let …
Run Code Online (Sandbox Code Playgroud)

javascript method-call async-await asynchronous-method-call

14
推荐指数
1
解决办法
942
查看次数

element.children的console.log显示0长度,但稍后扩展时有三个条目

在我的javascript中,我有两个元素.

我记录了两个元素,它显示了......

要素1.

在此输入图像描述

要素2.

在此输入图像描述

有问题.

当我console.logelement小号.children他们显然还有些HtmlCollection小号

您将在一分钟内理解以下内容:但奇怪的是,一个HtmlCollection为空(并且长度为0),但有3个元素(并且长度为3).

如果您console.log为元素的孩子阅读下面的s,您将理解我在说什么...

元素1儿童和长度:

在此输入图像描述

元素2儿童和长度:(搞砸了)

在此输入图像描述

有谁知道这里发生了什么?

我如何解决这个问题,我需要通过HtmlCollection循环,但它不会让我因为长度是0 ...?

提前致谢!所有帮助赞赏.

html javascript htmlcollection

11
推荐指数
1
解决办法
5449
查看次数

使用不同用户名/帐户的git clone

这是一个愚蠢的问题,但我已经查了很久,我找不到任何东西,所以我不得不问它.

你怎么clone上的东西git用不同的帐户?

例如,如果我登录abcdef,并且我想在帐户上克隆某些内容12345,我该怎么办?

我记得这样做之前:git clone url -l username.然后它会问我一个password,我会输入它.但这要么不再起作用,要么我的大脑正在弄乱我!

谢谢您的帮助.

git clone

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

firebase 云功能引擎节点与此模块不兼容

我创建了一个 firebase 云函数项目,它默认添加了以下依赖项和以下引擎:

"dependencies": {
  "firebase-admin": "^8.0.0",
  "firebase-functions": "^3.1.0"
},
"engines": {
  "node": "8"
}
Run Code Online (Sandbox Code Playgroud)

每当我运行时,yarn add我都会收到以下错误并且未添加依赖项:

error firebase-admin@8.4.0: The engine "node" is incompatible with this module. Expected version "^8.13.0 || >=10.10.0". Got "8.11.4"
Run Code Online (Sandbox Code Playgroud)

然后我尝试将节点引擎版本更改为 10 "engines": {"node": "10"},但现在当我添加纱线时出现以下错误:

error functions@: The engine "node" is incompatible with this module. Expected version "10". Got "8.11.4"
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

node.js npm firebase google-cloud-functions yarnpkg

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

SAT Polygon Circle Collision - 解决速度方向的交点并确定碰撞的一侧

概括

这个问题是用 JavaScript 编写的,但是用任何语言、伪代码或数学来回答都会很棒!

我一直在尝试实施Separating-Axis-Theorem来完成以下工作:

  • 检测凸多边形和圆之间的交点。
  • 找出可以应用于圆的平移以解决交点,以便圆几乎不接触多边形但不再在内部。
  • 确定碰撞轴(问题末尾的详细信息)。

我已成功完成第一个要点,您可以在问题末尾看到我的 javascript 代码。我在其他部分遇到困难。

解决交叉点

网上有很多关于如何解决圆的最小/最短重叠方向上的交点的例子。你可以在我最后的代码中看到我已经计算过了。

但是,这不适合我的需求。我必须解决与圆轨迹相反方向的碰撞(假设我已经有了圆的轨迹,并希望将其作为单位向量或角度,以适合的方式传递到我的函数中)。

您可以在下图中看到最短分辨率和预期分辨率之间的差异:

在此处输入图片说明

如何计算用于解析test_CIRCLE_POLY函数内部相交的最小平移向量,但要应用于特定方向,与圆的轨迹相反?

我的想法/尝试:

  • 我的第一个想法是在 SAT 算法中必须测试的轴上添加一个额外的轴,这个轴将垂直于圆的轨迹。然后,当投影到该轴上时,我将根据重叠进行解析。这会起作用,但在大多数情况下会解决很远的问题。它不会导致最低翻译。所以这不会令人满意。
  • 我的第二个想法是继续使用最短重叠的幅度,但将方向更改为与圆的轨迹相反。这看起来很有希望,但可能还有很多我没有考虑到的边缘情况。也许这是一个不错的起点。

确定碰撞的侧面/轴

我已经找到了一种方法来确定圆与多边形的哪一边碰撞。对于多边形的每个测试轴,我只会检查重叠。如果有重叠,那一边就是碰撞。

该解决方案是不能接受的一次,因为我想弄清楚只有一个视圆的轨迹上。

我的预期解决方案会告诉我,在下面的示例图像中,轴 A 是碰撞轴,而不是轴 B。这是因为一旦解决了交点,轴 A 就是与多边形边对应的轴只是勉强触及圆圈。

在此处输入图片说明

我的想法/尝试:

  • 目前我假设碰撞轴垂直于 MTV(最小平移向量)。这目前是不正确的,但是一旦我在问题的前半部分更新了相交解析过程,它应该是正确的轴。所以这部分应该首先解决。

  • 或者,我已经考虑从圆的先前位置和它们的当前位置 + 半径创建一条线,并检查哪边与这条线相交。然而,仍然存在歧义,因为有时会有不止一侧与线相交。

到目前为止我的代码

function test_CIRCLE_POLY(circle, poly, circleTrajectory) {
    // circleTrajectory is currently not being used

    let axesToTest = [];
    let shortestOverlap = +Infinity;
    let shortestOverlapAxis;

    // Figure out polygon axes that must be checked …
Run Code Online (Sandbox Code Playgroud)

javascript math collision-detection game-physics separating-axis-theorem

8
推荐指数
1
解决办法
845
查看次数

从jquery元素中删除keydown事件不起作用

我在元素上有keydown事件。

$("#element").keydown(function() {
     // do stuff!
});
Run Code Online (Sandbox Code Playgroud)

现在我要删除它。

我尝试过unbindoff但都没有工作。

$("#element").unbind("click");
$("#element").off("click");
Run Code Online (Sandbox Code Playgroud)

我是否需要做.on("click", function...).bind("click", function...)代替,.click如果使用unbindoff。如果是这样,那么这不是我的代码,并且不允许我对其进行修改,因此我需要一种替代方法。

除了“解除绑定”或“关闭”以外,还有其他可行的方法吗?

谢谢,非常感谢帮助!!

javascript jquery

7
推荐指数
1
解决办法
4099
查看次数

VS Code + Vim——点击进入插入模式

当我逐渐习惯 VS code 中的 Vim 扩展时,我发现自己经常退回到使用鼠标。

是否可以配置一个设置,以便每当我使用鼠标单击并移动光标时,vim 都会自动切换到插入模式?

如果我不想切换到插入模式,我一开始就不会看到自己使用鼠标。所以这个设定对我来说是有意义的。

visual-studio-code vscodevim

7
推荐指数
0
解决办法
700
查看次数