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

如何检查数组及嵌套数组属性并按需生成新数组?

JSON数组转换时的属性存在性检查实现方案

你的原转换代码如下:

const newdata = json.map((c) => {
   return {
     "User Name": c.userName,
     Email: c.email,
     Groups: c.newArrGroups.map(a => a.name).toString(),
     Version: c.clientVersion
   };
});

针对你提出的两个需求,以下是正确的实现逻辑:

核心思路

  1. 普通属性:先创建空对象,通过hasOwnProperty检查原对象的属性是否存在,仅当存在时才添加到新对象中。
  2. 嵌套数组字段:先验证原对象是否包含目标数组属性,再检查数组元素是否存在指定属性,满足条件才生成对应字段。

修改后的代码

const newdata = json.map((c) => {
  const item = {};

  // 处理普通属性:存在则添加
  if (c.hasOwnProperty('userName')) {
    item["User Name"] = c.userName;
  }
  if (c.hasOwnProperty('email')) {
    item.Email = c.email;
  }
  if (c.hasOwnProperty('clientVersion')) {
    item.Version = c.clientVersion;
  }

  // 处理嵌套数组Groups字段:仅当数组存在且有带name属性的元素时生成
  if (c.hasOwnProperty('newArrGroups') && Array.isArray(c.newArrGroups)) {
    // 过滤出包含name属性的元素,提取name值
    const validGroupNames = c.newArrGroups
      .filter(group => group.hasOwnProperty('name'))
      .map(group => group.name);
    
    // 有有效name值才添加Groups字段
    if (validGroupNames.length > 0) {
      item.Groups = validGroupNames.toString();
    }
  }

  return item;
});

逻辑说明

  • 普通属性处理:避免直接返回包含undefined值的属性,只有原对象明确拥有该属性时,才将其加入新对象。
  • 嵌套数组处理:
    1. 先确认newArrGroups是存在的数组;
    2. 用filter筛掉没有name属性的元素,确保只提取有效的名称;
    3. 只有当有效名称数组不为空时,才生成Groups字段,避免出现空字符串或无意义的字段。

可选变体(按需选择)

如果你的需求是只有当嵌套数组的所有元素都包含name属性时才生成Groups字段,可以将嵌套数组的判断逻辑改为:

if (c.hasOwnProperty('newArrGroups') && Array.isArray(c.newArrGroups)) {
  // 检查数组所有元素都有name属性
  const allHaveName = c.newArrGroups.every(group => group.hasOwnProperty('name'));
  if (allHaveName) {
    item.Groups = c.newArrGroups.map(group => group.name).toString();
  }
}

内容的提问来源于stack exchange,提问作者user8512043

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:48:19