如何用JavaScript判断属性字段为true并将对应字符串存入数组
JavaScript 对象属性判断与结果数组生成问题
需求描述
遍历对象数组,根据对象属性值生成结果数组,规则如下:
- 若对象的
kid属性为true,向结果数组推入'kidexists' - 若对象的
country属性为true,向结果数组推入'cnexists' - 若对象的
details属性为true,向结果数组推入'dtsexists' - 最终结果数组需包含所有满足条件的字符串,且自动去重
尝试代码
var itemList1 = [ {id:1, kid: true, country: true, details: false}, {id:2, kid: true, country: false, details: true}, {id:3, kid: true, country: false, details: false} ] var itemList2 = [ {id:1, kid: false, country: true, details: false}, {id:2, kid: true, country: false, details: false}, ] var r1 = this.result(itemList1) var r2 = this.result(itemList2) console.log("R1:", r1); console.log("R2:", r2); function result(items){ let finalResult=[] for (let i of items) { if (i.kid) { finalResult.push('kidexists'); } else if (i.country) { finalResult.push('cnexists'); } else if (i.details) { finalResult.push('dtsexists'); } finalResult = [...new Set(finalResult)]; return finalResult; } }
预期输出
- itemList1 的预期结果:
['kidexists', 'cnexists', 'dtsexists'] - itemList2 的预期结果:
['kidexists', 'cnexists']
问题分析与修正方案
原代码存在的问题
- 提前返回:
return finalResult写在for循环内部,导致只遍历数组第一个元素就直接返回结果,后续对象完全没有处理 - 条件判断逻辑错误:使用
else if会导致同一对象中多个属性为true时,仅处理第一个匹配的条件,忽略其他满足要求的属性 - 冗余去重操作:在循环内部重复执行去重,既影响性能,也没有必要
修正后的代码
var itemList1 = [ {id:1, kid: true, country: true, details: false}, {id:2, kid: true, country: false, details: true}, {id:3, kid: true, country: false, details: false} ] var itemList2 = [ {id:1, kid: false, country: true, details: false}, {id:2, kid: true, country: false, details: false}, ] var r1 = result(itemList1) var r2 = result(itemList2) console.log("R1:", r1); // 输出: R1: ['kidexists', 'cnexists', 'dtsexists'] console.log("R2:", r2); // 输出: R2: ['kidexists', 'cnexists'] function result(items){ let finalResult=[] for (let i of items) { // 改用独立的if判断,确保多个属性为true时都能被处理 if (i.kid) { finalResult.push('kidexists'); } if (i.country) { finalResult.push('cnexists'); } if (i.details) { finalResult.push('dtsexists'); } } // 遍历完成后再统一去重 return [...new Set(finalResult)]; }
修正说明
- 移除循环内的
return语句,确保遍历完数组所有对象 - 将
else if替换为独立的if判断,同一对象的多个属性为true时,所有对应字符串都会被推入数组 - 将去重操作移到循环结束后,仅执行一次,提升效率
内容的提问来源于stack exchange,提问作者Codelearn
相关产品推荐
相关产品推荐

