首页 > 解决方案 > Javascript按类过滤对象数组

问题描述

在这个对象数组中

array = [
0: foo1{name: "111", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
1: foo1 {name: "222", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
2: foo2 {name: "3", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
3: foo2 {name: "5", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
4: foo3 {name: "22", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
5: foo1 {name: "444", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
]

是否存在按对象类过滤的方法?例子 :

let arr = array.filter( foo => foo === foo1) ; 

// 预期输出:

arr = [ 
0: foo1 {name: "111", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
1: foo1 {name: "222", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
2: foo1 {name: "444", energy: 0, capacity: 0, comsuption: 0, season: 0, …}
]

https://stackblitz.com/edit/js-mkeg2b thx

标签: javascriptarraysfilter

解决方案


使用instanceof

instanceof 运算符测试构造函数的原型属性是否出现在对象的原型链中的任何位置。返回值是一个布尔值。

let arr = array.filter(foo => foo instanceof foo1)

let arr = []

class foo1 {
  constructor(name, value) {
    this.name = '',
      this.value = 0
  }
}

class foo2 {
  constructor(name, value) {
    this.name = '',
      this.value = 0
  }
}

class foo3 {
  constructor(name, value) {
    this.name = '',
      this.value = 0
  }
}

let bar1 = new foo1();
let bar2 = new foo2();
let bar3 = new foo3();

arr.push(bar1, bar1, bar1, bar1, bar2, bar3, bar2, bar1);

document.write('check in browser console')
console.log(arr.filter(foo => foo instanceof foo1))


推荐阅读