相关疑难解决方法(0)

在不使用Array的情况下在JavaScript中实现类似于Array的行为

有没有办法在JavaScript中创建类似数组的对象,而不使用内置数组?我特别关注这样的行为:

var sup = new Array(5);
//sup.length here is 0
sup[0] = 'z3ero';
//sup.length here is 1
sup[1] = 'o3ne';
//sup.length here is 2
sup[4] = 'f3our';        
//sup.length here is 5
Run Code Online (Sandbox Code Playgroud)

我在这里看到的特殊行为是sup.length更改而没有调用任何方法.我从这个问题中了解到,在数组的情况下,[]运算符会被重载,这就解释了这种行为.有没有一种纯粹的JavaScript方式来复制这种行为,或者语言是不是足够灵活?

根据Mozilla文档,正则表达式返回的值也可以用这个索引做一些时髦的事情.用普通的javascript可以实现吗?

javascript arrays overloading

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

Angular 8:TypeError:发现不可调用@@iterator

当我发送http get请求时,我收到这些错误TypeError: Found non-callable @@iterator,但它Angular 7不在Angular 8.

我的组件文件
component.ts文件中我调用了服务getCodes()

onSubmit(){
 this.service.getCodes('localhost/Aggregator/getCodes').subscribe (result=>{
 }, error =>{
    console.log(error);
 })
}
Run Code Online (Sandbox Code Playgroud)

我的拦截器文件
当我发送请求时,我已经通过拦截器传递了这些标头

@Injectable()
    export class Interceptor implements HttpInterceptor {
      sessionParam:any = {
        userParam: {
          'a':66,
          'b':101,
          'c':'0201',
          'd':'Y',
          'e':'Y',
          'h':'2019/02/22',
          'f':'Y',
          'g':12
        }
      }

      intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        let headers = new HttpHeaders();
        for (var val in this.sessionParam) {
          Object.keys(this.sessionParam[val]).forEach(key => {
            headers = headers.append(key,this.sessionParam[val][key]);
          });
        }
        request = …
Run Code Online (Sandbox Code Playgroud)

typescript angular

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

我如何扩展Array类并保留其实现

我想向Array类添加一些函数(我宁愿不要将它们作为类外部的函数使用,因为理想情况.下,在对象后面键入时可以发现它们)。这是我到目前为止的内容:

export class List<T> extends Array<T> {
    constructor(items?: Array<T>) {
        super(...items)
        Object.setPrototypeOf(this, List.prototype);
    }

    get first(): T {
        return this[0]
    }
}
Run Code Online (Sandbox Code Playgroud)

运行良好:

const list = new List([1,2,3]);
console.log(list.first)
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试运行此命令:

const list = new List([1,2,3]);
console.log(list.map(x=>x*2))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

        super(...items)
        ^
TypeError: Found non-callable @@iterator
Run Code Online (Sandbox Code Playgroud)

理想情况下,我将获得一个对象,该对象等效于new List(this.map(x=>x*2))如何在无需重写Array的所有方法的情况下扩展Array类?

class-extensions typescript

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

如何通过es6类构造数组

我希望一个类在new它返回时返回一个数组

class MyArray {
  constructor(){

  }
}

const myArray = new MyArray()
Array.isArray(myArray) // Should be true
Run Code Online (Sandbox Code Playgroud)

我以前用这种方式写它:

class MyArray {
  constructor(){
    const arry = new Array()
    return arry
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当我在Typescript中编写时,返回值arry不是MyArray的类型,因此它会提示错误.

如何解决这个问题?

javascript typescript

0
推荐指数
1
解决办法
43
查看次数