[英]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.