JavaScript中如何按条件过滤数组获取符合要求的id组成的结果数组
实现方案
你当前使用的filter方法仅会保留原数组中符合条件的对象元素,不会修改元素本身的结构,因此返回的是对象数组。要得到仅由符合条件的projectId组成的字符串数组,可参考以下两种实现:
方法1:filter + map 链式调用(逻辑直观易读)
先过滤掉projectId为search的对象,再遍历提取每个对象的projectId属性:
const projects = [ {projectId: "1111111", projectName: "A"}, {projectId: "search", projectName: "B"}, {projectId: "2222222", projectName: "C"}, {projectId: "search", projectName: "D"}, {projectId: "333333333", projectName: "E"} ]; const result = projects .filter(item => item.projectId && item.projectId !== 'search') // 保留原逻辑,可排除空值的projectId .map(item => item.projectId); console.log(result); // 输出:["1111111", "2222222", "333333333"]
方法2:reduce 单次遍历(性能更优,适合大数组场景)
一次遍历同时完成筛选和属性提取,避免对数组进行两次遍历:
const result = projects.reduce((accumulator, current) => { if (current.projectId && current.projectId !== 'search') { accumulator.push(current.projectId); } return accumulator; }, []); // 初始值为空数组
两种方法的输出都符合你的预期。
内容的提问来源于stack exchange,提问作者BlackWooDZZ
相关产品推荐
相关产品推荐

