如何从数组对象中筛选出指定元素组成新的数组对象?
实现方法
你可以通过以下几种简洁的方式实现需求:
方法一:使用filter筛选(保留原数组中匹配元素的顺序)
先定义需要筛选的目标名字集合,再用Array.filter()遍历原数组,留下符合条件的元素:
const mainArray = [ {id: 1, name: 'John', age: 10}, {id: 2, name: 'Mark', age: 14}, {id: 3, name: 'Kevin', age: 15}, {id: 4, name: 'Julie', age: 16}, {id: 5, name: 'Liz', age: 10}, {id: 5, name: 'Emma', age: 11}, {id: 6, name: 'Robert', age: 13}, ]; // 定义需要筛选的名字集合 const targetNames = ['Mark', 'Kevin', 'Emma']; // 筛选符合条件的元素 const specialKids = mainArray.filter(item => targetNames.includes(item.name)); console.log(specialKids); // 输出结果: // [ {id: 2, name: 'Mark', age: 14}, {id: 3, name: 'Kevin', age: 15}, {id: 5, name: 'Emma', age: 11} ]
方法二:按指定顺序生成数组(不受原数组顺序影响)
如果需要严格按照你指定的顺序返回结果,不管原数组中元素的位置,可以用Array.map()配合Array.find():
const mainArray = [ {id: 1, name: 'John', age: 10}, {id: 2, name: 'Mark', age: 14}, {id: 3, name: 'Kevin', age: 15}, {id: 4, name: 'Julie', age: 16}, {id: 5, name: 'Liz', age: 10}, {id: 5, name: 'Emma', age: 11}, {id: 6, name: 'Robert', age: 13}, ]; // 按你想要的顺序定义目标名字 const targetOrder = ['Mark', 'Kevin', 'Emma']; // 按顺序查找并生成新数组 const specialKids = targetOrder.map(name => mainArray.find(item => item.name === name)); console.log(specialKids); // 输出结果与需求完全匹配
额外提示
- 若原数组中存在同名不同对象的情况,
find()会返回第一个匹配的元素,filter()则会返回所有匹配元素;你的示例中目标名字唯一,两种方法都适用。 - 当目标名字数量较多时,用
Set存储目标名字可以提升查找效率:比如const targetNameSet = new Set(['Mark', 'Kevin', 'Emma']),筛选时用targetNameSet.has(item.name)即可。
内容的提问来源于stack exchange,提问作者Mohit
相关产品推荐
相关产品推荐

