Angular 更新后比较数组中的新旧订阅值

Angular 更新后比较数组中的新旧订阅值,angular,rxjs,observable,Angular,Rxjs,Observable,我在工作区中有以下可观察到的页面: 当添加新页面时,该页面会定期更新 我希望在添加新页面或页面流之前和之后保存页面数组,然后能够对它们进行比较 例如,在init上,若有三个页面,arrayOld将有三个页面。然后,如果添加一个新页面,将生成一个新数组arrayNew,包含四个页面 如果一个页面随后被删除,arrayOld将成为arrayNew长度为4的页面,arrayNew将成为长度为3的新页面集 我还没有找到一个简单的方法来实现这一点,使用订阅当前的页面流 这里的任何帮助都将是惊人的。谢谢大家

我在工作区中有以下可观察到的页面:

当添加新页面时,该页面会定期更新

我希望在添加新页面或页面流之前和之后保存页面数组,然后能够对它们进行比较

例如,在init上,若有三个页面,arrayOld将有三个页面。然后,如果添加一个新页面,将生成一个新数组arrayNew,包含四个页面

如果一个页面随后被删除,arrayOld将成为arrayNew长度为4的页面,arrayNew将成为长度为3的新页面集

我还没有找到一个简单的方法来实现这一点,使用订阅当前的页面流

这里的任何帮助都将是惊人的。谢谢大家!

也许是这样:

import { Observable, of } from 'rxjs';

const observable = of([1],[1,2], [1],[1,3],[1,3,4],[1,3,4,5]);

let arrayOld = [];
let arrayNew = [];

observable.subscribe(a => {
  arrayOld = JSON.parse(JSON.stringify(arrayNew));
  arrayNew = JSON.parse(JSON.stringify(a));
  
  console.log("---------------");
  console.log("old:", arrayOld);
  console.log("new:", arrayNew);
});
当页面删除和添加用数字编码时:

[1]: initially there is only page id=1
[1,2] added page id=2
[1] deleted page id=2
[1,3] added page id=3,
[1,3,4] added page id=4
[1,3,4,5] added page id=5
JSON.parseJSON.stringifyarrayNew:用于深度复制数组

下面是一场闪电战:

扫描的工作原理与reduce函数类似,您可以使用累加器返回上一个和当前的值

常数{of}=rxjs; const{scan}=rxjs.operators; [1,2]、[1,2]、[3,4]、[3,4]的管道 scanacc,当前=>{ acc.previous=acc.current; acc.电流=电流; 返回acc; }, {} .subscribe{current,previous}=>{ const added=previous?current.filteri=>!previous.includesi:current; const deleted=previous?previous.filteri=>!current.includesi:[]; console.log'Added:',Added; console.log'Deleted:',Deleted; }; 使用成对运算符。以下是一个例子:

const pages$: Observable<string[]> = of(
  ['Page1', 'Page2', 'Page3'],
  ['Page1', 'Page2', 'Page3', 'Page4'],
  ['Page1', 'Page2', 'Page3', 'Page4', 'Page5'],
);

pages$.pipe(
  startWith([]),
  pairwise(),
).subscribe(
  ([arr1, arr2]) => console.log(arr1, 'changed to', arr2),
);

看看startWithnull和pairWise是否会起作用。我刚刚阅读了链接到的答案,这是一个很好的解决方案。我不知道两两的事
const pages$: Observable<string[]> = of(
  ['Page1', 'Page2', 'Page3'],
  ['Page1', 'Page2', 'Page3', 'Page4'],
  ['Page1', 'Page2', 'Page3', 'Page4', 'Page5'],
);

pages$.pipe(
  startWith([]),
  pairwise(),
).subscribe(
  ([arr1, arr2]) => console.log(arr1, 'changed to', arr2),
);
[]
changed to
["Page1", "Page2", "Page3"]

["Page1", "Page2", "Page3"]
changed to
["Page1", "Page2", "Page3", "Page4"]

["Page1", "Page2", "Page3", "Page4"]
changed to
["Page1", "Page2", "Page3", "Page4", "Page5"]