js 使用for循环过滤对象数组

    let objList = [
        {name:'tom',age:12},
        {name:'jack',age:33},
        {name:'zio',age:12},
        {name:'lolo',age:89},
        {name:'robin',age:16},
        ]
    
    let ageList = [12,16];
    let getData = objList.filter((item)=>{
        return ageList.includes(item.age)
    });
    
    console.log(getData)

如上所示,最后打印出来的数据是年龄为12 16的元素 ,想请教各位大佬,如果只是用for循环的方法如何才能过滤对象数组得到想要的数据呢?

阅读 4.8k
3 个回答
var newArr=[];
for(var i=0;i<objList.length;i++)
  ageList.indexOf(objList[i].age)!=-1&&(newArr.push(objList[i]));

这标题取的,完全跟算法无关好吧,就是基础判断而已

let getData = [];
for (let i = 0; i < objList.length; i++) {
  let item = objList[i];
  if (ageList.includes(item.age)) {
    getData.push(item);
  }
}
console.log(getData)

filter可以简化成

 let getData = objList.filter(({age}) => ageList.includes(age));

2段代码的结果一样,根本没必要写for循环,反正上线都要编译成es5

如果不考虑顺序问题可以先把数据源Array转成Map.Array<?>,再使用过滤条件逐一取出想要的数据:

let objList = [
    {name:'tom',age:12},
    {name:'jack',age:33},
    {name:'zio',age:12},
    {name:'lolo',age:89},
    {name:'robin',age:16},
];
let map = {};
objList.forEach(item => (map[item.age] = map[item.age]||[]).push(item));
console.log(map);

let ret = [];
[12,16].forEach(item => {
    map[item] && Array.prototype.push.apply(ret, map[item]);
});
console.log(ret);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题