第一种的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()的返回值为一个包含对象自身的所有可枚举属性值的数组