小编sho*_*ukh的帖子

Array#push导致大型数组的"堆栈级太深"错误

我制作了两个阵列,每个阵列有100万个项目:

a1 = 1_000_000.times.to_a
a2 = a1.clone
Run Code Online (Sandbox Code Playgroud)

我试图将a2推入a1:

a1.push *a2
Run Code Online (Sandbox Code Playgroud)

这回来了SystemStackError: stack level too deep.

但是,当我尝试使用时concat,我没有收到错误:

a1.concat a2
a1.length # => 2_000_000
Run Code Online (Sandbox Code Playgroud)

我也没有得到splat运算符的错误:

a3 = [*a1, *a2]
a3.length # => 2_000_000
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我查看了文档Array#push,并用C语言编写.我怀疑它可能是在引擎盖下进行一些递归,这就是为什么它会导致大型数组的这个错误.它是否正确?push用于大型阵列不是一个好主意吗?

ruby arrays

24
推荐指数
1
解决办法
808
查看次数

测试数组索引是否等于数组值

当数组中的值与索引相同时,代码将返回数组中的最低索引.如果没有匹配,我应该返回-1.例如:

indexEqualsValue([-8,0,2,5])
output: 2 //array[2] == 2

indexEqualsValue([-1,0,3,6])
output: -1  //no matches
Run Code Online (Sandbox Code Playgroud)

当没有匹配或者数组的长度为零时,代码可以工作,但在其他时候则不行.我认为问题是我的if语句中的第一个条件.我不一定想要一个答案,更多关于我应该检查/重写的提示.

谢谢!

function indexEqualsValue(a) {
    return a.reduce((acc, currV, currI) => {
      if (currI === currV) {
        return currV;
      }
      return -1;
  }, 0);
}
Run Code Online (Sandbox Code Playgroud)

javascript arrays reduce undefined

9
推荐指数
1
解决办法
314
查看次数

使泛型类型 Array<keyof T> 需要 T 的所有键

我想声明一种类型,它需要将给定类型的所有键都T包含在一个数组中,例如:

checkKeys<T>(arr: Array<keyof T>): void {
  // do something
}

interface MyType {
  id: string;
  value: number;
}
Run Code Online (Sandbox Code Playgroud)

目前,如果调用checkKeys<MyType>TS 将认为传递的值是有效的,如果它包含MyType( id | value) 的任何键:

checkKeys<MyType>(['id', 'value']); // valid

checkKeys<MyType>(['id']); // valid

checkKeys<MyType>(['id', 'values']); // invalid
Run Code Online (Sandbox Code Playgroud)

是否可以要求在数组中指定所有键?

generics typescript keyof

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

Angular6如何测试一系列http请求

我已经创建了一个获取用户信息的服务django rest auth.所以我需要2个单独的请求.一个用于获取身份验证令牌,另一个用于获取用户信息.

userService服务中,我有一个login调用其他方法的方法.他们每个人都向不同的URL发送一个http请求.为了测试行为login,我需要模拟这2个方法的请求.第一种方法返回Promise包含身份验证密钥的方法,第二种方法返回Promise包含用户对象的方法.这是我在服务类中的代码:

public getAuthToken(identifier: string, password: string) {
  const requestBody = is_valid_email(identifier) ? {email: identifier, password: password} :
                                                 {username: identifier, password: password};
  let savedToken = getFromStorage('auth');
  if (savedToken) {
    try {
      savedToken = JSON.parse(savedToken);
    } catch (e) {
      savedToken = null;
    }
  }
  return new Promise((resolve, reject) => {
    if (savedToken) {
      resolve(savedToken);
    } else {
      this.http.post<string>(APIUrlSolver.login, requestBody).subscribe(data => {
        const dataObj = JSON.parse(data);
        UserService._auth_token = …
Run Code Online (Sandbox Code Playgroud)

unit-testing http jasmine angular

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

使用FormBuilder创建禁用的表单组

假设我们有myFormGroup通过FormBuilder初始化的:

this.myFormGroup = this.fb.group(
  {
    field1: ['', SomeValidator1],
    field2: ['', AnotherValidator2],
    field3: [''],
    ...
  }
);
Run Code Online (Sandbox Code Playgroud)

我知道我们可以禁用特定的表单控件,例如:

fb.control({value: 'my val', disabled: true});
Run Code Online (Sandbox Code Playgroud)

当然,我可以在示例中使用此语法,并将组中的每个控件标记为已禁用。但是表单组可能有很多控件。

因此,问题-是否有任何方法可以通过FormBuilder 创建(而不是之后)禁用整个FormGroup / FormArray的同时

ps我问这个问题的原因是因为我需要有条件地初始化具有不同类型用户权限的活动或禁用字段的表单组。

angular angular-reactive-forms angular-forms

6
推荐指数
2
解决办法
2303
查看次数

AngularCompilerPlugin 中的警告:分叉类型检查器意外退出

当我处于开发模式并且在我的 IDE 中更改代码后(有时)我收到此控制台警告消息:

WARNING in AngularCompilerPlugin:
Forked Type Checker exited unexpectedly.
Falling back to type checking on main thread.
Run Code Online (Sandbox Code Playgroud)

基于 Angular 6 和 Angular-cli 6 的项目。更准确的版本:

"@angular/cli": "6.0.8" "@angular/*": "6.0.4"

我正在通过 VSCode 终端使用node v8.11.3和运行项目npm v5.6.0

在此处输入图片说明

任何help || explanation将不胜感激。

npm angular-cli angular angular6

5
推荐指数
1
解决办法
8750
查看次数

在 Angular 组件的模板中使用“this”关键字

假设我们prop在组件类中有一个变量,我们通过模板中的插值来使用它(stackblitz demo):

组件类:

@Component({...})
export class AppComponent  {
  prop = 'Test';
  ...
}
Run Code Online (Sandbox Code Playgroud)

模板:

<p>{{ this.prop }}</p>
<p>{{ prop }}</p>
Run Code Online (Sandbox Code Playgroud)

为什么在 Angular 中可以this在模板中使用关键字而没有任何警告/错误(即使在 AOT 模式下)?它的背后是什么?

编辑

根据答案中的注释:this 指的是为其呈现模板的组件本身。但我也可以创建一个模板变量并使用this以下方法访问它:

<input #inp> {{ this.inp.value }}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们inp在组件类中没有变量,我仍然可以使用{{this.inp...}}. 魔法?

html data-binding typescript angular2-template angular

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

当 angular 4 中的链接上没有路由时,如何处理会话超时(或过期的令牌)

对于过期令牌,我有一个非常常见的情况,如下所示,Kindle 帮助我解决这个问题。

我的申请会话是 30 分钟,现在让我们说,我在一个页面上的时间超过 30 分钟,然后单击任何其他页面链接。所以它会重定向到登录页面。在这里,通过路由重定向,以便主动保护进入图片并检查令牌是否已过期,然后重定向到登录页面。到目前为止看起来不错。它工作正常。

但是,可以说,我在同一页面上有一个刷新链接(通过调用 new get http 请求刷新表记录),它只是刷新表记录(它不会刷新整个页面)。如果我在同一页面上超过 30 分钟,然后单击刷新按钮,如何检查令牌是否已过期。因为,在这个刷新场景中,路由没有被使用,所以它不会去主动保护来检查令牌是否过期。

您能否指导我如何处理这个用例。

提前致谢 !!!

session session-timeout angular

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

ReadonlyArray继承了什么类?

我在TypeScript中有这个代码片段:

const arr: ReadonlyArray<string> = [
    "123",
    "234"
];

arr.push("345");
Run Code Online (Sandbox Code Playgroud)

TS编译器显示错误:

Property 'push' does not exist on type 'ReadonlyArray<string>'.

当然,很明显我不能改变/改变这个阵列.问题是:什么是基类ReadonlyArray?它是否继承标准Array类?

typescript

3
推荐指数
1
解决办法
460
查看次数