vue3.0的数组对象提取相同的属性值

第一种的vue3.0数组对象提取相同的属性值示例

<script setup lang="ts">
import { ref, onMounted } from 'vue'
const Total = ref(3)
const list = ref([
    {
        "PERSONNAME": "储军",
        "NATIONNAME": "汉",
        "SEXNAME": "男",
        "EDULEVELNAME": "大专",
        "DEGREENAME": "无学位",
        "IDCARDTYPENAME": "身份证",
        "CORPCODE": "91330110MA2B2TAQ77",
        "CORPNAME": "杭州晨磊建设工程有限公司",
        "SPECIALTYTYPENAME": "注册建造师(二级)",
        "AWARDDATE": "2007-09-03",
        "EFFECTDATE": "2024-01-04",
        "CERTNUM": "浙233070720244",
        "IDCARD1": "3209************12",
        "AWARDDEPART": "浙江省住房和城乡建设厅",
        "ZHUANYE": "市政公用工程",
        "IDCARD": "hutyVxqhaVieCQeXGRPwaiN7p1eNx5VENpIbd6pIWQw="
    },
    {
        "PERSONNAME": "储军",
        "NATIONNAME": "汉",
        "SEXNAME": "男",
        "EDULEVELNAME": "大专",
        "DEGREENAME": "无学位",
        "IDCARDTYPENAME": "身份证",
        "CORPCODE": "91330110MA2B2TAQ77",
        "CORPNAME": "杭州晨磊建设工程有限公司",
        "SPECIALTYTYPENAME": "注册建造师(二级)",
        "AWARDDATE": "2007-09-03",
        "EFFECTDATE": "2025-11-30",
        "CERTNUM": "浙233070720244",
        "IDCARD1": "3209************12",
        "AWARDDEPART": "浙江省住房和城乡建设厅",
        "ZHUANYE": "建筑工程",
        "IDCARD": "hutyVxqhaVieCQeXGRPwaiN7p1eNx5VENpIbd6pIWQw="
    },
    {
        "PERSONNAME": "储军",
        "NATIONNAME": "汉",
        "SEXNAME": "男",
        "EDULEVELNAME": "大专",
        "DEGREENAME": "无学位",
        "IDCARDTYPENAME": "身份证",
        "CORPCODE": "91330110MA2B2TAQ77",
        "CORPNAME": "杭州晨磊建设工程有限公司",
        "SPECIALTYTYPENAME": "项目负责人",
        "AWARDDATE": "2008-05-04",
        "EFFECTDATE": "2023-02-27",
        "CERTNUM": "浙建安B(2008)0100622",
        "IDCARD1": "3209************12",
        "AWARDDEPART": "浙江省住房和城乡建设厅",
        "ZHUANYE": "",
        "IDCARD": "hutyVxqhaVieCQeXGRPwaiN7p1eNx5VENpIbd6pIWQw="
    },
    {
        "PERSONNAME": "储军",
        "NATIONNAME": "汉",
        "SEXNAME": "男",
        "EDULEVELNAME": "大专",
        "DEGREENAME": "无学位",
        "IDCARDTYPENAME": "身份证",
        "CORPCODE": "91330110MA2B2TAQ77",
        "CORPNAME": "杭州晨磊建设工程有限公司",
        "SPECIALTYTYPENAME": "errtt",
        "AWARDDATE": "2008-05-04",
        "EFFECTDATE": "2023-02-27",
        "CERTNUM": "浙建安B(2008)0100622",
        "IDCARD1": "3209************12",
        "AWARDDEPART": "浙江省住房和城乡建设厅",
        "ZHUANYE": "",
        "IDCARD": "hutyVxqhaVieCQeXGRPwaiN7p1eNx5VENpIbd6pIWQw="
    }
]) as any



onMounted(() => {
    // 定义一个对象来接收重新构造的数组
    let dataInfo = {} as any
    //通过map遍历list数据获取遍历后的数据
    list.value.map((item:any) => {
        let dataInfo1 = {} as any
        //获取item里面的SPECIALTYTYPENAME属性的值
        let { SPECIALTYTYPENAME } = item
        if(!dataInfo[SPECIALTYTYPENAME]) {
            // 构建一个新的对象
            dataInfo[SPECIALTYTYPENAME] = {
                HisSerilNo: SPECIALTYTYPENAME,
                data: []
 
            }
        }
        dataInfo1 = item
        //将赋值好的对象push到dataInfo[SPECIALTYTYPENAME]的data数组里面
        dataInfo[SPECIALTYTYPENAME].data.push(dataInfo1)

    })
    // 将处理好的数据通过Object.values返回成一个数组
    let result = Object.values(dataInfo)
    console.log(result,'result');
    list.value = result
})
</script>

<template>
    <div>
        <div class="aptitude">
            <div class="allTotal">
                该人员共有
                <span>{{ Total }}</span> 项执业信息,详细情况如下:
            </div>
            <table class="tableBox" v-if="Total > 0" border="1">
                <tbody v-for="(item, i) in list" :key="i" >
                    <tr>
                        <td colspan="4" class="tableBox_td">
                            {{ item.HisSerilNo }}
                        </td>
                    </tr>
                    <template v-for="(info, i) in item.data" :key="i">
                        <tr>
                            <td class="bg">所属企业名称</td>
                            <td>{{ info.CORPNAME }}</td>
                            <td class="bg">发证单位</td>
                            <td>{{ info.AWARDDEPART }}</td>
                        </tr>
                        <tr>
                            <td class="bg">发证日期</td>
                            <td colspan="3">
                                {{ info.AWARDDATE == "年月日" ? "" : info.AWARDDATE }}
                            </td>
                        </tr>
                        <tr>
                            <td class="bg">专业</td>
                            <td>{{ info.ZHUANYE }}</td>
                            <td class="bg">有效期</td>
                            <td>{{ info.EFFECTDATE == "年月日" ? "" : info.EFFECTDATE }}</td>
                        </tr>
                        <tr style="height: 20px"></tr>
                    </template>
                </tbody>
            </table>
            <div v-else>
                <p style="
            text-align: center;
            padding: 30px 0px;
            border: 1px solid #d9d9d9;
            border-top: 0px;
          ">
                    暂无数据
                </p>
            </div>
        </div>
    </div>
</template>

<style scoped>
.tableBox {
    margin-bottom: 20px;
    border-collapse:collapse;
}

.tableBox tbody em.name {
    font-size: 13px;
    color: #007af8;
    font-style: normal;
    position: relative;
}

.tableBox tbody tr td {
    width: 300px;
}

.tableBox tbody em.name::after,
.tableBox tbody em.name:after {
    position: absolute;
    bottom: 0;
    width: 20px;
    height: 2px;
    content: "";
    background: #007af8;
    left: 50%;
    margin-left: -10px;
    bottom: -8px;
}

.tableBox_td {
    text-align: left;
    color: #007af8;
    font-size: 18px;
    font-weight: bold;
}
</style>

第二种:构建一个需要处理的json字符串

json1 = {
    "ResultCode": "0",
    "Count": "5",
    "ReturnQty": "5",
    "List":  [{
                "HisDocumentNo": "W5702089",
                "HisSerilNo": "230551010032000072207050627609",
                "PrescDateTime": "2022-07-05 15:05:12",
                "ItemName": "单项补体测定(C1q)",
            },
            {
                "HisDocumentNo": "W5702090",
                "HisSerilNo": "230551010032000072207050627609",
                "PrescDateTime": "2022-07-05 15:05:12",
                "ItemName": "一次性使用静脉采血器",
            },
            {
                "HisDocumentNo": "W5702093",
                "HisSerilNo": "230551010032000072207050627609",
                "PrescDateTime": "2022-07-05 15:05:12",
                "ItemName": "全血细胞计数+五分类",
            },
            {
                "HisDocumentNo": "W5702095",
                "HisSerilNo": "230551010032000072207050627609",
                "PrescDateTime": "2022-07-05 15:05:12",
                "ItemName": "四肢多普勒血流图",
            },
            {
                "HisDocumentNo": "W5702096",
                "HisSerilNo": "230551010032000072207050627609",
                "PrescDateTime": "2022-07-05 15:05:12",
                "ItemName": "颅脑(脑组织)磁共振平扫",
            },
            {
                "HisDocumentNo": "W5702095",
                "HisSerilNo": "23055101003200007220705062760",
                "PrescDateTime": "2022-07-05 15:05:12",
                "ItemName": "四肢多普勒血流图",
            },
            {
                "HisDocumentNo": "W5702096",
                "HisSerilNo": "230551010032000072207050627609",
                "PrescDateTime": "2022-07-05 15:05:12",
                "ItemName": "颅脑(脑组织)磁共振平扫",
            }
        ]
    }

2、通过js代码实现数据的重构

// 定义一个对象来接收重新构造的数组
    let dataInfo = {}
    //通过map遍历json数据获取遍历后的数据
    json1.List.map(item => {
        let dataInfo1 = {}
        //获取item里面的HisSerilNo属性的值
        let { HisSerilNo } = item
        if(!dataInfo[HisSerilNo]) {
            // 构建一个新的对象
            dataInfo[HisSerilNo] = {
                HisSerilNo: HisSerilNo,
                data: []
 
            }
        }
        //给对象添加字段以及赋值
        dataInfo1.ItemName = item.ItemName
        dataInfo1.HisDocumentNo = item.HisDocumentNo
        //将赋值好的对象push到dataInfo[HisSerilNo]的data数组里面
        dataInfo[HisSerilNo].data.push(dataInfo1)
        
    })
    // 将处理好的数据通过Object.values返回成一个数组
    let result = Object.values(dataInfo)
    //遍历数组
    result.forEach(item => {
        console.info(item)
    })

3、最后构造出来的对象数组

{
  HisSerilNo: '230551010032000072207050627609',
  data: [
    { ItemName: '单项补体测定(C1q)', HisDocumentNo: 'W5702089' },
    { ItemName: '一次性使用静脉采血器', HisDocumentNo: 'W5702090' },
    { ItemName: '全血细胞计数+五分类', HisDocumentNo: 'W5702093' },
    { ItemName: '四肢多普勒血流图', HisDocumentNo: 'W5702095' },
    { ItemName: '颅脑(脑组织)磁共振平扫', HisDocumentNo: 'W5702096' },
    { ItemName: '颅脑(脑组织)磁共振平扫', HisDocumentNo: 'W5702096' }
  ]
}
{
  HisSerilNo: '23055101003200007220705062760',
  data: [ 
    { ItemName: '四肢多普勒血流图', HisDocumentNo: 'W5702095' 
    } 
  ]
}

Object.values()的返回值为一个包含对象自身的所有可枚举属性值的数组

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值