数组和可观察数组有什么区别?
What is the difference between an Array and an Observable Array?
在 TypeScript 中,any[]
和 Observable<any[])>
之间的主要区别是什么?
使用它们各自的优缺点是什么?
Observables 用于实现观察者模式。您可以订阅这个 Observable,当 Observable 发出数据时,您会收到异步通知。
Observable<any[])
是 Observable,它包含一个数组。在这种情况下,数组可以包含任何类型,因为它的类型为 any.
一个数组只是一个对象,它一次可以保存多个值。
The Observable object represents a push based collection.
The Observer and Observable interfaces provide a generalized mechanism
for push-based notification, also known as the observer design
pattern. The Observable object represents the object that sends
notifications (the provider); the Observer object represents the class
that receives them (the observer).
对比
Arrays are list-like objects whose prototype has methods to perform traversal and mutation operations. Neither the length of a JavaScript array nor the types of its elements are fixed.
要全面了解 space 和时间的各种类型的值,包括单数和复数,请参阅 A General Theory of Reactivity。
数组是空间可迭代。换句话说,它是一个可迭代对象(事物列表),存在于 space 中的某一点,您现在可以并且想要使用它。
可观察对象是时间可迭代对象。换句话说,它是一个随时间散布的事物列表,您可以一个一个地消费它。
举一个具体的例子,让我们看看如何迭代这些类型的列表:
数组:
const array: Array<number> = [1, 2, 3];
array.forEach(elt => console.log(elt));
这是同步的,将立即执行。
可观察:
const observable: Observable<number> = Observable.from([1, 2, 3]);
observable.subscribe(elt => console.log(elt));
这是异步的,并且会在元素进入时一次执行一个元素。
但是,您问了一个稍微不同的问题,即数组和数组的可观察对象之间的区别(为了清楚起见,我们应该避免调用"array observable",因为这可能会被误解为 "array of observables",这是另一回事,尽管肯定有用)。
不同之处在于,正如我提到的,数组只是单个时间点的单个值列表。数组的可观察对象是数组的 流 ,每个 "tick" 产生一个完整的、新的、不同的数组。
因此,如果您只想要一个项目列表,请使用数组。当然,您可以改变或转换数组,但这不会改变在任何给定时间点只有一个数组的事实。
如果您打算继续获取数组的新版本——不同时间点的不同版本——并且您希望"push"将每个新版本输出到数组的不同部分,请使用数组的可观察对象你的程序,在可观察的术语中将 "subscribe" 到可观察的,并在每次更新时得到通知。
然后回答你的问题:
What is the main difference between any[]
and Observable<any[])>
?
一个是数组,另一个是数组的可观察(流)。
What are the cons and pros of using each of them?
优缺点是,要数组就用数组。如果你想要一个数组的可观察对象,那么你应该使用一个数组的可观察对象。
请注意,尽管您的问题涉及 TypeScript,但数组和可观察对象(包括数组的可观察对象)的概念基本上与语言无关。
在 TypeScript 中,any[]
和 Observable<any[])>
之间的主要区别是什么?
使用它们各自的优缺点是什么?
Observables 用于实现观察者模式。您可以订阅这个 Observable,当 Observable 发出数据时,您会收到异步通知。
Observable<any[])
是 Observable,它包含一个数组。在这种情况下,数组可以包含任何类型,因为它的类型为 any.
一个数组只是一个对象,它一次可以保存多个值。
The Observable object represents a push based collection.
The Observer and Observable interfaces provide a generalized mechanism for push-based notification, also known as the observer design pattern. The Observable object represents the object that sends notifications (the provider); the Observer object represents the class that receives them (the observer).
对比
Arrays are list-like objects whose prototype has methods to perform traversal and mutation operations. Neither the length of a JavaScript array nor the types of its elements are fixed.
要全面了解 space 和时间的各种类型的值,包括单数和复数,请参阅 A General Theory of Reactivity。
数组是空间可迭代。换句话说,它是一个可迭代对象(事物列表),存在于 space 中的某一点,您现在可以并且想要使用它。
可观察对象是时间可迭代对象。换句话说,它是一个随时间散布的事物列表,您可以一个一个地消费它。
举一个具体的例子,让我们看看如何迭代这些类型的列表:
数组:
const array: Array<number> = [1, 2, 3];
array.forEach(elt => console.log(elt));
这是同步的,将立即执行。
可观察:
const observable: Observable<number> = Observable.from([1, 2, 3]);
observable.subscribe(elt => console.log(elt));
这是异步的,并且会在元素进入时一次执行一个元素。
但是,您问了一个稍微不同的问题,即数组和数组的可观察对象之间的区别(为了清楚起见,我们应该避免调用"array observable",因为这可能会被误解为 "array of observables",这是另一回事,尽管肯定有用)。
不同之处在于,正如我提到的,数组只是单个时间点的单个值列表。数组的可观察对象是数组的 流 ,每个 "tick" 产生一个完整的、新的、不同的数组。
因此,如果您只想要一个项目列表,请使用数组。当然,您可以改变或转换数组,但这不会改变在任何给定时间点只有一个数组的事实。
如果您打算继续获取数组的新版本——不同时间点的不同版本——并且您希望"push"将每个新版本输出到数组的不同部分,请使用数组的可观察对象你的程序,在可观察的术语中将 "subscribe" 到可观察的,并在每次更新时得到通知。
然后回答你的问题:
What is the main difference between
any[]
andObservable<any[])>
?
一个是数组,另一个是数组的可观察(流)。
What are the cons and pros of using each of them?
优缺点是,要数组就用数组。如果你想要一个数组的可观察对象,那么你应该使用一个数组的可观察对象。
请注意,尽管您的问题涉及 TypeScript,但数组和可观察对象(包括数组的可观察对象)的概念基本上与语言无关。