使用ES6筛选数组对象:根据指定名称数组过滤人员数据
用ES6语法筛选匹配指定name的人员对象
嘿,这事儿用ES6的数组方法就能轻松搞定!咱们直接上代码,再给你唠唠为啥这么写:
const persons = [{ name: "john", age: 23 }, { name: "lisa", age: 43 }, { name: "jim", age: 101 }, { name: "bob", age: 67 }]; const names = ["lisa", "bob"]; // 核心代码就这一行 const filteredPersons = persons.filter(person => names.includes(person.name)); console.log(filteredPersons); // 输出结果正是你要的:[{ name: "lisa", age: 43 }, { name: "bob", age: 67 }]
为啥这么写?
filter()是ES6数组的迭代方法,它会遍历persons里的每一个对象,只有当回调函数返回true时,这个对象才会被保留到新的filteredPersons数组里。includes()同样是ES6新增的数组方法,它能快速判断某个值是否存在于数组中——这里就是检查当前遍历到的person的name是不是在names数组里,是的话就返回true,留下这个对象。
进阶优化(数据量大时用)
如果你的names数组特别长,比如有成百上千个元素,那把它转成Set会更高效,因为Set的has()方法查找速度是O(1),比数组的includes()(O(n))快得多:
const nameSet = new Set(names); const filteredPersons = persons.filter(person => nameSet.has(person.name));
这个写法同样是纯ES6语法,而且性能更好~
内容的提问来源于stack exchange,提问作者kallada
相关产品推荐
相关产品推荐

