在一个较大的对象数组里查询指定的对象

较大的数组

对于较大的数组处理首先考虑两个问题,第一个要使用原生的for循环,即:

for(j = 0,len=arr.length; j < len; j++) {
   
}

缓存了数组长度后能够有效提高运行效率,同时原生的性能最好 附: 对于较大数组的遍历运行效率比较 10000长度数组的运行效率

第二个要注意的就是如果可以使用二分法,那么二分后会提高效率,举例说明 一个Vue的表单中存在带筛选的Boolean值A,那么在数据加载好之后我们可以在mounted()周期中添加一个方法,将所有A===true的放入数组中,其他的放入另外一个实现二分

快速筛选对象

可以使用ES6的filter方法,过滤掉不符合条件的元素,举例说明:

const origin = [
  {
    A: "joasdjfoijas",
    B: "oasdjfojoadsjf",
  },
  {
    A: "joasdjfoijaafdafasfs",
    B: "oasdjfojoadsjfdasfasdf",
  },
  {
    A: "111",
    B: "Joe",
  },
]

let result = origin.filter(function(value){
  return value.A === "111"&&value.B === "Joe"
})

console.log(result)

通过Array的filter方法用回调的方式一次比较多个值是否匹配,避免多次遍历

利用filtermap组合可以大量过滤需要的元素并输出所需要的值,例如:

var arr = [{
  gender: 'man',
  name: 'john'
}, {
  gender: 'woman',
  name: 'mark'
}, {
  gender: 'man',
  name: 'jerry'
}]
// filter : 有条件的筛选,返回条件为true的数组
// 筛选出性别为男性的名字集合
var newArr = arr.filter(n => n.gender === 'man').map(item => {
  return {
    name: item.name
  }
})
console.log('男性名字集合', newArr)   // => [{name: 'john'}, {name: 'jerry'}]

// 作者:付出
// 链接:https://juejin.im/post/5a5f3eaf518825733201a6a7

避免了老式的for+continue,也提高了代码的可读性