JavaScript中如何按指定键匹配条件筛选生成新数组对象
JavaScript按条件筛选对象属性生成新数组的实现
核心实现逻辑
- 先预处理
arr2,筛选出所有c值为true的属性名,得到允许保留的字段列表 - 遍历
arr1.data的每一个对象,仅保留列表中存在的属性,生成新对象组成最终数组
原代码问题说明
- 没有按规则筛选要保留的属性,直接把完整的源对象push到结果数组
- 嵌套循环中多次重复push同一个对象,导致结果数组元素重复
- 混用map返回值和外部finals数组,逻辑混乱
完整可运行代码
var arr1 = { data:[ {id:1, place: "IN", year: "2020", mode: "ON"}, {id:3, place: "TH", year: "2022", mode: "OFF"}, {id:5, place: "AU", year: "2025", mode: "ON"} ] }; var arr2=[ {a: "place", c: true}, {a: "year", c: true}, {a: "mode", c: false}, ] // 第一步:筛选出需要保留的属性名 const allowKeys = arr2.filter(item => item.c).map(item => item.a) // 第二步:遍历生成新数组 const result = arr1.data.map(item => { const newItem = {} allowKeys.forEach(key => { if (item.hasOwnProperty(key)) { newItem[key] = item[key] } }) return newItem }) console.log(result)
输出结果
[ {place: "IN", year: "2020"}, {place: "TH", year: "2022"}, {place: "AU", year: "2025"} ]
内容的提问来源于stack exchange,提问作者ved
相关产品推荐
相关产品推荐

