如何用ES6的Filter/Reduce实现对象过滤?实例求助
解决办法:从对象中筛选指定ID的评论并构造成目标数组
嘿,我来帮你搞定这个问题~你之前的代码有两个关键问题:
comments是普通对象,不是数组,所以没法直接调用数组的filter方法;- 就算是数组场景,你用
commentIdList.map(...)返回的是一个布尔值数组,而filter需要单个布尔值作为判断条件,逻辑也不成立。
基础实现方案
我们可以直接遍历 commentIdList,把每个ID对应的评论构造成单个键值对对象,最后组合成目标数组:
const commentIdList = [2, 3]; const comments = { 1: "a", 2: "b", 3: "c", 4: "d" }; // 核心代码 const filteredComments = commentIdList.map(id => ({ [id]: comments[id] })); console.log(filteredComments); // 输出: [{2:"b"}, {3:"c"}]
这里用到了ES6计算属性名 [id],它允许我们用变量作为对象的键,刚好匹配你需要的单个键值对对象结构。
进阶:过滤无效ID
如果担心 commentIdList 里存在 comments 中没有的ID,可以先过滤掉无效项,再构造数组,避免出现无效对象:
const filteredComments = commentIdList .filter(id => comments.hasOwnProperty(id)) // 先筛选存在的ID .map(id => ({ [id]: comments[id] }));
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

