JavaScript去除数组对象中多余字段,提取对象数组中某些的属性组成新的对象数组。

文章讲述了如何使用JavaScript的map方法从包含多个属性的对象数组中,提取出一两个特定属性,如classtypecode,创建新的对象数组。提供了两种不同的实现方法,并提到了当属性值为null时的处理情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象数组中每个对象包含很多属性,批量操作只需要要用到一两个属性,可以提取原数组中的属性组成一个新的对象数组。

const data=[
        {
            "classtypecode": "新人对象-NST-suoxie", 
            "classtypename": null, 
            "trainset": null, 
            "trainobject": null, 
            "traintype": null, 
            "classsimple": null, 
            "state": null, 
            "isopenup": null, 
            "xrflag": null, 
            "branchtype": null, 
            "branchtype2": null, 
            "makeoperator": null, 
            "makedate": null, 
            "maketime": null, 
            "modifyoperator": null, 
            "modifydate": null, 
            "modifytime": null, 
            "p1": null, 
            "isDel": null
        }, 
        {
            "classtypecode": "外勤-NST-WQ001", 
            "classtypename": null, 
            "trainset": null, 
            "trainobject": null, 
            "traintype": null, 
            "classsimple": null, 
            "state": null, 
            "isopenup": null, 
            "xrflag": null, 
            "branchtype": null, 
            "branchtype2": null, 
            "makeoperator": null, 
            "makedate": null, 
            "maketime": null, 
            "modifyoperator": null, 
            "modifydate": null, 
            "modifytime": null, 
            "p1": null, 
            "isDel": null
        }, 
        {
            "classtypecode": "测试-NST-CC", 
            "classtypename": null, 
            "trainset": null, 
            "trainobject": null, 
            "traintype": null, 
            "classsimple": null, 
            "state": null, 
            "isopenup": null, 
            "xrflag": null, 
            "branchtype": null, 
            "branchtype2": null, 
            "makeoperator": null, 
            "makedate": null, 
            "maketime": null, 
            "modifyoperator": null, 
            "modifydate": null, 
            "modifytime": null, 
            "p1": null, 
            "isDel": null
        }, 
        {
            "classtypecode": "XR-ST-XRXGPX", 
            "classtypename": null, 
            "trainset": null, 
            "trainobject": null, 
            "traintype": null, 
            "classsimple": null, 
            "state": null, 
            "isopenup": null, 
            "xrflag": null, 
            "branchtype": null, 
            "branchtype2": null, 
            "makeoperator": null, 
            "makedate": null, 
            "maketime": null, 
            "modifyoperator": null, 
            "modifydate": null, 
            "modifytime": null, 
            "p1": null, 
            "isDel": null
        }, 
        {
            "classtypecode": "入司6个月-ST-RS", 
            "classtypename": null, 
            "trainset": null, 
            "trainobject": null, 
            "traintype": null, 
            "classsimple": null, 
            "state": null, 
            "isopenup": null, 
            "xrflag": null, 
            "branchtype": null, 
            "branchtype2": null, 
            "makeoperator": null, 
            "makedate": null, 
            "maketime": null, 
            "modifyoperator": null, 
            "modifydate": null, 
            "modifytime": null, 
            "p1": null, 
            "isDel": null
        }, 
        {
            "classtypecode": "XR-NST-XRYWPX", 
            "classtypename": null, 
            "trainset": null, 
            "trainobject": null, 
            "traintype": null, 
            "classsimple": null, 
            "state": null, 
            "isopenup": null, 
            "xrflag": null, 
            "branchtype": null, 
            "branchtype2": null, 
            "makeoperator": null, 
            "makedate": null, 
            "maketime": null, 
            "modifyoperator": null, 
            "modifydate": null, 
            "modifytime": null, 
            "p1": null, 
            "isDel": null
        }, 
        {
            "classtypecode": "A201-NST-YWZRJSB", 
            "classtypename": null, 
            "trainset": null, 
            "trainobject": null, 
            "traintype": null, 
            "classsimple": null, 
            "state": null, 
            "isopenup": null, 
            "xrflag": null, 
            "branchtype": null, 
            "branchtype2": null, 
            "makeoperator": null, 
            "makedate": null, 
            "maketime": null, 
            "modifyoperator": null, 
            "modifydate": null, 
            "modifytime": null, 
            "p1": null, 
            "isDel": null
        }
    ] 
  • 方法一:
 let newArr = data.map((item, index) => {
    return Object.assign({}, { value: item.classtypecode, label: item.classtypecode });
  });
  • 方法二:
 const newArr = data.map((x) => {
    return { value: x.classtypecode, label: x.classtypecode };
 }); 

在这里插入图片描述

将maketime的属性值变成新的对象属性,classtypecode的属性值变成maketime的属性值的属性值

  let arr1 = data.map((item) => {
        let obj = {};
        obj[item.maketime] = item.classtypecode;
        return obj;
      });

在这里插入图片描述
null 是因为maketime值为null

<think>我们需要从给定的JSON数组中,根据cardType为"homeManage"的对象的ifShow字段返回其值(在这个例子中是"true")。给定的数组是一个包含两个对象数组,我们需要找到cardType为"homeManage"的那个对象,然后返回它的ifShow属性。我们可以使用数组的find方法(如果环境支持ES6)或者使用循环来查找。但是注意:给定的数组格式看起来有点问题,它多了一个逗号在最后,不过我们假设这是输入时的错误,实际数据应该是有效的JSON。由于输入是字符串,我们需要先解析为JSON数组,然后进行操作。但是,如果这个数组是直接给定的(如问题中所示),我们可以直接操作。不过问题中给出的数组是字符串形式,所以我们需要解析。然而,问题中给出的数组格式不完整(末尾有逗号),我们需要修正它。修正后的数组应该是:[{"id": "709744399584037253","cardType":"homeWelcome","ifShow": "true","cardName": "欢迎标语"},{"id": "709744399584037254","cardType":"homeManage","ifShow": "true","cardName": "管理指南"} ]然后,我们写代码来提取。步骤:1.解析JSON字符串(如果输入是字符串的话)。2.遍历数组,找到cardType为"homeManage"的对象。3.返回该对象的ifShow属性。如果输入是字符串,我们需要用JSON.parse解析;如果直接是数组,可以直接使用。但是问题中给出的数组是以代码形式出现的,所以我们假设它是一个字符串,因为用户可能传递的是字符串。但是注意,问题中给出的数组末尾有逗号,这在JSON中是不允许的。所以我们需要先修正字符串(去掉多余的逗号)再解析,或者确保输入是合法的JSON。考虑到问题中给出的数组是:[{...}, {...},]->注意最后有一个逗号,这是非法的。因此,在实际应用中,我们需要确保JSON字符串是合法的。如果无法确保,我们可以尝试修复(比如删除最后一个逗号)或者使用try-catch。不过,根据问题描述,我们假设用户会提供合法的JSON,或者我们直接操作数组(因为问题中是以代码形式给出的数组,而不是字符串)。但是,问题要求是:数组根据homeManage这个字段返回ifShow。所以我们可以假设输入是一个数组(已经解析好的),或者是一个字符串。为了通用性,我们可以先判断输入类型。但问题没有明确,所以我们写一个函数,可以处理数组或者字符串。不过,根据问题上下文,我们直接操作数组即可,因为问题中给出的就是数组字面量。但是,问题描述中这个数组是作为示例给出的,所以我们写代码时直接使用这个数组变量。然而,问题要求返回ifShow,所以我们可以这样:代码示例(使用JavaScript):</think>要解决从给定JSON数组中根据`cardType`为"homeManage"的字段返回其`ifShow`值的问题,以下是完整的JavaScript解决方案: ```javascript function getIfShowByCardType(data, targetCardType) { // 1. 使用find()方法查找匹配项 const targetItem = data.find(item => item.cardType === targetCardType); // 2. 检查是否找到匹配项 if (targetItem) { return targetItem.ifShow; } else { return null; // 或返回特定错误信息 } } // 示例数据 const jsonData = [ { "id": "709744399584037253", "cardType": "homeWelcome", "ifShow": "true", "cardName": "欢迎标语" }, { "id": "709744399584037254", "cardType": "homeManage", "ifShow": "true", "cardName": "管理指南" } ]; // 调用函数获结果 const result = getIfShowByCardType(jsonData, "homeManage"); console.log(result); // 输出: "true" ``` ### 代码解释: 1. **`find()`方法**: - 使用数组的`find()`方法遍历JSON数组 - 为每个元素执行回调函数 `item => item.cardType === targetCardType` - 当找到第一个匹配项时立即返回该对象 2. **条件检查**: - 如果找到匹配项,返回其`ifShow`属性值 - 如果未找到,返回`null`(可根据需求改为抛出错误或返回默认值) 3. **函数参数**: - `data`: 包含配置对象JSON数组 - `targetCardType`: 要查找的目标卡片类型(本例中为"homeManage") 4. **示例调用**: - 传入实际数据`jsonData`和目标类型`"homeManage"` - 函数返回匹配对象的`ifShow`值(本例为"true") ### 注意事项: 1. **数据格式要求**:输入必须是有效的JSON数组,每个对象需包含`cardType`和`ifShow`字段 2. **大小写敏感**:`cardType`匹配是大小写敏感的("homeManage" ≠ "HomeManage") 3. **多匹配处理**:`find()`只返回第一个匹配项,如有多个相同类型项,需改用`filter()` ### 相关扩展方案: 如果需要处理更复杂的情况(如大小写不敏感、多结果处理): ```javascript // 大小写不敏感版本 function getIfShowCaseInsensitive(data, targetCardType) { const lowerTarget = targetCardType.toLowerCase(); const item = data.find(item => item.cardType.toLowerCase() === lowerTarget ); return item?.ifShow ?? null; } // 获所有匹配项的版本(返回数组) function getAllIfShow(data, targetCardType) { return data .filter(item => item.cardType === targetCardType) .map(item => item.ifShow); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值