简体   繁体   English

通过调用 javascript class 的 object 在内部调用 function。 我想通过调用 class object 来打印优先队列数组

[英]Call function inside by calling the object of a javascript class. I want to print the array of priority queue by calling the class object

Here is my Sample Code这是我的示例代码

class PriorityQueue {
  constructor() {
    this.items = [];
  }
  
  isEmpty() {
    if (this.items.length === 0) return true;
    return false;
  }

  hasValue(element) {
    return this.items.some((item) => item[0] === element);
  }
  peek() {
    this.isEmpty() 
    return this.items[0];
  }
  poll() {
    this.isEmpty() 
    return this.items.splice(0, 1);
  }
  add(number, priority) {
    if (priority===undefined) return this.items.push({ element: number, priority: null });
    if(this.isEmpty() || this.items[this.items.length-1].priority<priority)
    return this.items.push({ element: number, priority: priority })
    for (let i = this.items.length-1; i >= 0; i--) {
      if (this.items[i].priority <= priority)
        return this.items.splice(i+1 , 0, { element: number, priority: priority });
    }
    return this.items.splice(0 , 0, { element: number, priority: priority });
  }
  printAll(){
      return this.items.map(item=>item.element)
  }
}
var priorityQueue= new PriorityQueue();
priorityQueue.add(10, 1);
console.log(Array.from(priorityQueue.printAll())) // [10]
priorityQueue.add(100, 0);
console.log(Array.from(priorityQueue.printAll())) // [100,10]
priorityQueue.add(200, 0);
console.log(Array.from(priorityQueue.printAll())) // [100,200,10]

But what I want priorityQueue object calls printAll() function inside the class.但是我想要priorityQueue object 在class 内部调用printAll() function。 Is it possible?可能吗? Can we handle with proxies?我们可以处理代理吗? This is what I want below这就是我想要的下面

 var priorityQueue= new PriorityQueue();
    priorityQueue.add(10, 1);
    console.log(Array.from(priorityQueue)) // [10]
    priorityQueue.add(100, 0);
    console.log(Array.from(priorityQueue)) // [100,10]
    priorityQueue.add(200, 0);
    console.log(Array.from(priorityQueue)) // [100,200,10]

Array.from uses Symbol.iterator , so you can just define that with a generator function : Array.from使用Symbol.iterator ,因此您可以使用生成器 function来定义它:

class PriorityQueue {
  // other functions
  *[Symbol.iterator]() {
    for (const item of this.items) {
      yield item.element;
    }
  }
}

No, a proxy won't help with anything here.不,代理在这里没有任何帮助。

The Array.from method converts an iterable object to an array, so what you want to do is to implement the iterable protocol on your priority queue instances: Array.from方法可迭代的 object 转换为数组,因此您要做的是在优先级队列实例上实现可迭代协议

class PriorityQueue {
  constructor() {
    this.items = [];
  }
  …
  *[Symbol.iterator]() {
    for (const item of this.items) {
      yield item.element;
    }
  }
  // Alternatively:
  // [Symbol.iterator]() {
  //   return this.items.map(item => item.element).values()
  // }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM