var jcxm = [{"examNo":"0005327886","name":"CT肺部平扫"},{"examNo":"0005327887","name":"CT双髋关节三维成像"},{"examNo":"0005327886","name":"CT重建"}];
var map = {};
var dest=[];
for(var i = 0; i < jcxm.length; i++){
var ai = jcxm[i];
if(!map[ai.examNo]){
dest.push({
examNo: ai.examNo,
data: [ai]
});
map[ai.examNo] = ai;
}else{
for(var j = 0; j < dest.length; j++){
var dj = dest[j];
if(dj.examNo == ai.examNo){
dj.data.push(ai);
break;
}
}
}
}
console.log(dest);
代码解释:
这段代码的功能是对数组jcxm
进行重组。初始状态下,jcxm
是一个包含多个对象的数组。每个对象都有两个属性:examNo
表示考试编号,name
表示考试名称。
代码中的map
对象用于存储已经遍历过的考试编号,以及对应的考试对象。dest
数组用于存储最终的结果。代码通过遍历数组jcxm
,判断每个考试编号是否已经在map
对象中存在。
如果遍历到的考试编号不在map
中,则创建一个新的对象,将遍历到的考试编号和对应的对象放入该对象中,并将该对象放入dest
数组中。同时,将该考试编号和对象存入map
中。
如果遍历到的考试编号已经在map
中存在,则通过遍历dest
数组来找到该考试编号对应的对象,并将当前遍历到的对象放入该已存在对象的data
数组中。
最终的结果是将具有相同考试编号的对象组合在一起,放入dest
数组中。例如,如果有两个对象的考试编号都为"0005327886",则它们会被组合在一起,放入dest
数组中的一个元素中。
经过以上步骤,dest
数组中的元素是根据考试编号进行了分组的对象,每个对象的data
属性是一个数组,包含了所有具有相同考试编号的对象。
运行结果: