You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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']

问题分析与修正方案

原代码存在的问题

  1. 提前返回:return finalResult写在for循环内部,导致只遍历数组第一个元素就直接返回结果,后续对象完全没有处理
  2. 条件判断逻辑错误:使用else if会导致同一对象中多个属性为true时,仅处理第一个匹配的条件,忽略其他满足要求的属性
  3. 冗余去重操作:在循环内部重复执行去重,既影响性能,也没有必要

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 09:05:33