我可以使用distinctUntilKeyChanged来删除重复的对象吗?

教育开发团队

我是Angular 7中的rxjs的新手,我有一个返回用户详细信息的api。我想删除具有相同名称的对象,我几乎没有使用distinctUntilKeyChanged()尝试过,但是在控制台中获得的输出与从api相同响应。我也可以直接使用从服务返回的数据,因为使用Interface响应已经是可观察的,而无需在组件中使用From()或0f()。

这是针对angular 7和Rxjs 6的,我已经使用angular一年了,但是直到现在我还没有使用Rxjs,这在Rxjs中引起了很多混乱,我可以直接在组件中使用服务的Http响应,否则我想要简短地使用任何运算符将响应转换为流,我可以在组件中直接使用Json响应来使用不同的运算符,例如find(),first(),ignoreElements等...

user.service.ts

  private urlLara = 'http://laravel.technalatus.com/public/api/'
  public getusers(): Observable<User> {
    const head = new HttpHeaders({
      'Accept': 'application/json',
      'Content-Type': 'application/json',
    })
    return this.http.get<User>(this.urlLara + 'users', { headers: head 
    });
  }

component.ts

export class AppComponent implements OnInit {
  title = 'angularrxjs';
  items: {};
  post: Post;
  user: User;
  public searchTerm: string;

  constructor(private UserService: UserService) {

  }

  ngOnInit() {
    this.distinct()
  }

  public Duchanged() {
    // custom compare for name
    this.UserService.getusers().pipe(distinctUntilChanged((prev, curr) => prev.name === curr.name))
      .subscribe(console.log);

  }

作为输出

[
{id: 2, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "admin"},
{id: 3, name: "Ellaware", email: "[email protected]", email_verified_at: null, type: "user"},
{id: 17, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "user"}
]

预期输出为

[
{id: 2, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "admin"},
{id: 3, name: "Ellaware", email: "[email protected]", email_verified_at: null, type: "user"},
]
纳什11

您对工作方式distinctUntilKeyChanged和方法的想法distinctUntilChanged不正确。根据文档

  • distinctUntilKeyChanged仅在指定键值已更改时发出。(来源:docs
  • distinctUntilChanged仅在当前值不同于上一个值时发出。(来源:docs

由于在每个对象中name从最后一个对象开始的更改,因此每次都会发出。就您而言,distinctUntilKeyChangeddistinctUntilChanged仅在您的“与众不同”项目按如下顺序排列时才有效

[
  { id: 3, name: "Ellaware", email: "[email protected]", email_verified_at: null, type: "user" },
  { id: 2, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "admin" },
  { id: 17, name: "alshoja", email: "[email protected]", email_verified_at: null, type: "user" }
]

您可以distinct改用

import { distinct, toArray } from 'rxjs/operators';

public Duchanged() {
  this.UserService.getusers()
  .pipe(
    distinct(user => user.name),
    toArray()
  )
  .subscribe(console.log);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以使用对象的单击命令,使用继承来删除重复代码吗?

我可以使用ʻobj.constructor === Array`来测试对象是否为Array吗?

我可以使用R中的字符来选择数据框或其他对象吗?

我可以使用基于noSQL的文档来存储json对象吗?

我可以使用 mule 对象存储来持久化 HTTP 连接吗?

可以使用tkinter按钮重复更改画布对象吗?

我可以使用 for 循环来获得相同的结果吗?

我可以使用此列表来填充Arrayadapter吗?

我可以使用 AgensGraph 来迁移数据吗?

我可以使用重构来交换变量的类型吗?

我可以使用 for 循环来创建类吗?

我可以使用锁来确保指令顺序吗?

我可以使用按钮来清除画布吗?

我可以使用 NavigationController 来关闭屏幕移动吗?

我可以使用python来CSP吗?

我可以使用 SUMPRODUCT 来完成此操作吗?

我可以使用 <span> 来实现吗?

我可以使用类来更改 CSS 变量吗?

我可以使用模来反转输出线吗?

我可以使用MVC 5远程验证来检查重复值,但要排除正在编辑的项目吗?

我们可以使用一个RowMapper对象而不是每次创建对象来获取结果吗?

我可以使用assign复制对象的对象吗?

我可以使用Mockito来部分覆盖现有对象(而不仅仅是测试)吗?

我可以使用LINQ来检查列表中的对象是否具有唯一ID吗?

我可以使用defer删除地图元素吗?

我可以使用BeautifulSoup删除脚本标签吗?

我可以使用 ezdxf 删除空图层吗?

我可以使用HTML元素作为对象键吗?

我可以使用printf()打印该类的对象吗?